1

我正在编写一个程序,使用两个函数和一个数组来显示输入数据的范围。我已经完成了大部分工作,但是我收到了一些我无法弄清楚的错误消息,而且我的 main 函数很难处理。有任何想法吗?

 /* 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]); 
}
4

2 回答 2

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。

毕竟,我让循环正常运行。

于 2013-07-16T01:47:04.487 回答
0

请查看您的代码中的以下问题:

int accident;
//...
while (accident < SIZE)

你没有初始化事故。

  updateRange(&accident, &accident_range);           
  displayRange(&accident_range[]);

displayRange 中的参数语法不好,另外您不需要取消引用数组。(由于您似乎也不需要 updateRange 中的“int事故”,因此您可能应该将其作为参数删除。

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 变量并将其更改为定义:

#include <stdio.h>
#define SIZE 6
于 2013-07-16T02:12:40.450 回答