2013-01-18 196 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