我正在编写一个程序,使用两个函数和一个数组来显示输入数据的范围。我已经完成了大部分工作,但是我收到了一些我无法弄清楚的错误消息,而且我的主要功能很难。有什么想法吗?
/* program to display frequency counts of traffic accidents */
#include <stdio.h>
void updateRange(int accident, int accident_range[]);
void displayRange(int accident_range[]);
int main(void)
{
int accident;
const int SIZE = 6;
int accident_range[SIZE];
while (accident < SIZE)
{
accident_range[accident] = 0;
++accident;
}
updateRange(&accident, &accident_range);
displayRange(&accident_range[]);
return(0);
}
void updateRange(int accident, int accident_range[])
{
accident = 0;
do
{
printf("Enter an accident count (negative to end):");
scanf("%d", &accident);
if (accident == -1)
break;
else if(accident >= 0 && accident <= 99)
accident_range[0]++;
else if(100 <= accident && accident <= 199)
accident_range[1]++;
else if(200 <= accident && accident <= 299)
accident_range[2]++;
else if(300 <= accident && accident <= 399)
accident_range[3]++;
else if(400 <= accident && accident <= 499)
accident_range[4]++;
else
accident_range[5]++;
} while (accident != -1);
}
void displayRange(int accident_range[])
{
printf("Range Frequency \n" ) ;
printf(" 0-99 %d\n", accident_range[0]);
printf("100-199 %d\n", accident_range[1]);
printf("200-299 %d\n", accident_range[2]);
printf("300-399 %d\n", accident_range[3]);
printf("400-499 %d\n", accident_range[4]);
printf("500 or above %d\n", accident_range[5]);
}
答案 0 :(得分:0)
此:
updateRange(&accident, &accident_range);
displayRange(&accident_range[]);
实际上应该只是:
updateRange(accident, accident_range);
displayRange(accident_range);
updateRange
获取指针和数组。您正在传递指针的地址和没有任何意义的数组的地址。直接传递它们。
displayRange
的类似故事也期待一个阵列。 &accident_range[]
没有任何意义(并且它不会编译)。您的声明正在传递您尚未指定的数组中的值的地址,例如&accident_range[0]
将传递您不想要的位置0的值的地址。只需直接传递accident_range
。
最后,您应该在使用之前初始化accident
。我假设你想把它初始化为0。
毕竟我让循环行为正常。
答案 1 :(得分:0)
请查看代码中的以下问题:
int accident;
//...
while (accident < SIZE)
你没有初始化事故。
updateRange(&accident, &accident_range);
displayRange(&accident_range[]);
displayRange中的参数是错误的语法,另外您不需要取消引用该数组。 (因为你在updateRange中似乎也不需要'int accident',你应该把它作为参数删除。
void updateRange(int accident_range[]);
void displayRange(int accident_range[]);
updateRange(accident_range);
displayRange(accident_range);
在函数updateRange()中,你还应该对while循环添加一个检查,以确保它永远不会写出数组:
int count = 0;
do {
//....
} while (accident >=0 && ++count < SIZE);
你的程序的描述文本也说如果你输入一个负数,循环退出,但实际上它只在输入'-1'时退出循环。
请注意,您应该从main中删除const int size变量并将其更改为define:
#include <stdio.h>
#define SIZE 6