2013-01-18 156 views
-2
#include<stdio.h> 

int main() 
{ 
    int line,linex; 

    printf("Enter number of lines: "); 
    scanf("%d",&line); 
    linex=line; 

    while(line!=0) 
    { 
     int input=0,total=0,number=0; 

     printf("Enter line %d: ",(linex-line+1)); 
     scanf("%d",input); 

     while (input!=-1) 
     { 
      total+=input; 
      number++; 
     } 
     printf("Average = %f\n",(total/number)); 
     line-=1; 
    } 
    return 0; 
} 

上面是我的代码,它会询问用户行数,每行中的数字,然后打印出每行的平均值。事情是,当我尝试在Microsoft Visual C++ 2010 express中运行此程序时,程序崩溃。我输入-1以破坏第二个WHILE循环后崩溃。C代码在运行时崩溃

+1

当大卫写道scanf函数需要变量输入的地址。顺便说一句,你的内部while循环将被跳过,或者它将被输入并且永远不会离开,因为'input!= - 1'是循环不变的。 –

+0

除了崩溃,'total/number'是一个整数,而不是一个浮点数,所以你在那里有未定义的行为。使用'(float)total/number',将'total'转换为'float',以便进行浮点除法('total /(float)number'也可以)。 –

回答

4
scanf("%d",input); 

应该是:

scanf("%d",&input); 
+0

* facepalm *是的,这是什么导致崩溃,谢谢 – watisit

0

导致崩溃,因为你已经忘记了传递地址scanf函数,即你已经忘记了在scanf函数的时候写&。 它必须是

scanf("%d",&input); 
3

无关,但

while (input!=-1) 
    { 
     total+=input; 
     number++; 
    } 

是一个无限循环。如果第一次输入-1,则

printf("Average = %f\n",(total/number)); 

是除以零的除法。两者都需要固定

+0

感谢您的意见。 “ – watisit

+0

”是一个零除“除此之外,它是未定义的行为,因为它是一个”int“而不是”float“。 –

0
scanf("%d",input); 

应该

scanf("%d",&input); 

和分工

printf("Average = %f\n",(total/number)); 
0

崩溃之前,如果number != 0检查情况发生的原因无限循环

while (input!=-1) 
{  
     total+=input; 
     number++; 
} 

修复这个循环我们做。

还有更多潜在的错误:

scanf("%d",input); //& missing 

printf("Average = %f\n",(total/number)); // may cause divide by zero