2013-09-28 90 views
0

我非常喜歡在C編程的初學者,所以請在這裏幫忙。我試圖編寫一個程序,循環詢問用戶輸入一個數字,如果該數字是正數,則將其添加到總數中,如果是負數,則結束程序並顯示平均值,最低輸入和最高輸入。不幸的是,無論我改變什麼樣的低和高的事物,我總是會得到'低',而高數的負數,請幫助!C編程nan輸出

#include<stdio.h> 
int main(void) 
{ 
    float input; 
    float total; 
    float low; 
    float high; 
    float average; 
    int count=0; 

    printf("\n\nPlease enter a positive number to continue or a negative number"); 
    printf(" to stop: "); 

    scanf("%f", &input); 

    while (input > 0) 
    { 
     count = count + 1; 
     printf("\nPlease enter a positive number to continue or a negative"); 
     printf(" number to stop: "); 
     scanf("%f", &input); 
     total = total + input; 

     if (low < input) 
     { 
      (low = input); 
     } 
     else 
     { 
      (low = low); 
     } 
    } 
    if (input < high) 
    { 
     (high = input); 
    } 
    else 
    { 
     (high = high); 
    } 

    average = total/count; 
    printf("\n\n\nCount=%d",count); 
    printf("\n\n\nTotal=%f",total); 
    printf("\nThe average of all values entered is %f\n", average); 
    printf("\nThe low value entered: %f\n", low); 
    printf("\nThe highest value entered: %f\n", high); 
    return 0; 
} 

用gcc編譯它,並用數字1,5,4測試它,然後經過-1我得到以下輸出

Count=3 


Total=8.000000 
The average of all values entered is 2.666667 

The low value entered: nan 

The highest value entered: -1.000000 
+0

你可能要初始化變量給出的答案初始化除了改變執行順序。由於您尚未定義低點,因此您在比較低點<輸入點時比較未知點。當你輸入時也是如此。在C中,默認情況下變量未被初始化。 –

回答

0

您的犧牲品垃圾的價值觀 - 一種常見的錯誤對於初學者。具體來說,它發生在這些行 -

float total; 
float low; 
float high; 
float average; 

當你寫這個,系統分配變量的內存位置。計算機雖然不是無限的,但它只是使用一個曾經被別的東西使用但不再被使用的內存位置。但大多數情況下,「其他」不會自行清理(因爲這會花費很多時間),所以那裏的信息仍然存在,例如fdaba7e23f。這對我們來說毫無意義,所以我們稱之爲垃圾價值。

您可以通過初始化變量,像這樣解決這個問題 -

float total=0; 
float low; 
float high; 
float average=0; 

注意,您必須添加一些額外的邏輯低變量。下面是做這件事 -

printf("\n\nPlease enter a positive number to continue or a negative number"); 
printf(" to stop: "); 

scanf("%f", &input); 
low=input; 
high=input; 

while (input > 0) 
.... 
.... 

正如你所看到的,我只是複製你的代碼和第一scanf後添加兩行。

+0

我對變量賦予它們的值進行了更改,例如,建議用於解決低輸入和高輸入的代碼塊的最佳方式是什麼? –

+0

@SalZ。我更新了答案,告訴你如何。 –

+0

不會在while語句之前的低=輸入和高=輸入,只是將低值和高值打印爲負數? –

0

首先,我不知道你是否注意到它,你的數量和總數都搞砸了。

請從@Drgin

int total = input; 
while (input > 0) 
{ 
printf("\nPlease enter a positive number to continue or a negative"); 
printf(" number to stop: "); 
scanf("%f", &input); 
count = count + 1; 
total = total + input;