c-主要功能和错误消息的问题



我正在编写一个程序,使用两个函数和一个数组来显示输入数据的范围。我已经完成了大部分工作,但我收到了一些错误消息,我无法理解,而且我的主要功能很难实现。有什么想法吗?

 /* 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

相关内容

  • 没有找到相关文章