我正在编写一个程序,使用两个函数和一个数组来显示输入数据的范围。我已经完成了大部分工作,但我收到了一些错误消息,我无法理解,而且我的主要功能很难实现。有什么想法吗?
/* 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 %dn", accident_range[0]);
printf("100-199 %dn", accident_range[1]);
printf("200-299 %dn", accident_range[2]);
printf("300-399 %dn", accident_range[3]);
printf("400-499 %dn", accident_range[4]);
printf("500 or above %dn", accident_range[5]);
}
这:
updateRange(&accident, &accident_range);
displayRange(&accident_range[]);
实际上应该只是:
updateRange(accident, accident_range);
displayRange(accident_range);
CCD_ 1取一个指针和一个数组。您正在传递指针的地址和数组的地址,这没有任何意义。直接传过去就行了。
displayRange
也有类似的情况,它也需要一个数组。&accident_range[]
没有任何意义(也没有编译)。您的语句正在传递数组中未指定的值的地址,例如&accident_range[0]
将传递您不想要的位置0处的值地址。直接通过accident_range
即可。
最后,你应该在使用accident
之前将其初始化为某个值。我假设你希望它初始化为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