2016-07-05 55 views
1

該程序運行,但我得到一些愚蠢的值輸出,我不知道爲什麼。有誰能提供一些見解嗎?大於正常輸出值?

#include <stdio.h> 

int main() 
{ 

// Declare values and open weather.txt 
FILE *gpep; 
int k; 
float wind[11], temp[11], num[11], minT=800, maxT=12, minW=800, maxW=9, 

sum_wind=0, sum_temp=0, avgW, avgT; 
    gpep = fopen("gpep.txt", "r"); 


if (gpep != NULL){ 
gpep 

     for (k = 0; k < 13; k++) 
     { 
     fscanf(gpep, "%f %f %f" , &num[k], &wind[k], &temp[k]); 


     sum_wind += wind[k]; 
     sum_temp += temp[k]; 
     avgW= sum_wind/13; 
     avgT= sum_temp/13; 

     printf("Average Temp: %f \n Average wind: %f \n", avgT, avgW); 
    } 

    else 
    { 
     printf("Can't Open\n"); 
    } 

fclose(gpep); 

getchar(); 
getchar(); 
return 0; 
} 
+1

這將是更好,如果我們看到'weather.txt',你可以查閱一下你讀過只是把在'fscanf()'後面緊跟''printf()''。 – Sergio

+1

請正確格式化您的代碼。它幾乎不可讀。謝謝。 – user3078414

回答

3

最大值和最小值的計算是錯誤的,看看這個:

if (wind[k] > maxW) { 
    wind[k]=maxW; 
} 

它改變您的數據!應該是這樣的:

if (wind[k] > maxW) { 
    maxW=wind[k]; // stores a greater value in maxW 
} 

也有整數除法的問題,可以考慮使用雙打:

double avgW; // declare it as a real 

和未來:

avgW = sum/13.0; // floating division 

但是,我們不明白爲什麼你把通過13不應該是恆定的,但目前的數字閱讀內容:

avgW = ((double)sum)/(k+1); // convert one to double to ensure correct division 

---編輯---

也有初始化的問題,其實你沒有初始化平均,總和等。 你必須!初始化它們作爲總和= 0,最大值=可能值少,等:

int sum=0; 
int maxW = INT_MIN; 
int minW = INT_MAX; 

+0

感謝您的建議,現在最高溫度,總溫度和平均溫度似乎是正確的。儘管由於某些原因,我的最小值都是0,最大勝率總和勝,平均風數是荒謬的。 –

+0

等待編輯... –

+0

我忘了,它已被編輯。 –

1

我覺得你的問題是,因爲整數除法(即sum_wind/13sum_temp/13)的。您應該聲明它們爲floatdouble變量,以獲得正確的除法結果。整數除法將結果截斷爲零。

+1

這並不完全如此。整數除法產生由除數和整數除法餘數可整除的最小的小股息的商。 _Modulo_操作產生除法餘數AFAIK。 – user3078414

+0

是的,你是對的。現在要糾正。 –