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

时间:2013-07-15 23:37:10

标签: c 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]); 
}

2 个答案:

答案 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