2016-07-05 7 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 
} 

:私たちはあなたが分ける理由を理解していない

avgW = sum/13.0; // floating division 

しかし、:

double avgW; // declare it as a real 

と、次のようにする必要があります13で?一定ではなく、読み取り要素の現在の数をすべきではありません:

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

--- EDIT ---

また、あなたは平均、合計、など初期化されません実際には、初期化の問題を、持っている

。 絶対です!など合計= 0、最大=少ない可能な値、として、それらを初期化します。

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

など

+0

提案していただきありがとうございます。最高温度、合計温度、平均温度が正しいようです。何らかの理由で私の最小値は0で、最大の勝利合計が勝ち、平均風は馬鹿げて高い数字です。 –

+0

編集待ち... –

+0

忘れました。編集されました。 –

1

私はあなたの問題は、整数の除算(すなわちsum_wind/13sum_temp/13)のだと思います。正しい除算結果を得るには、floatまたはdoubleという変数を宣言する必要があります。整数除算は結果をゼロに切り捨てます。

+1

これはそうではありません。整数除算は、除数によって完全に割り切れる最も近い小さな被除数から商を生成し、除算残余を無視する。 _Modulo_演算は、除算剰余AFAIKを生成します。 – user3078414

+0

はい、そうです。今修正する。 –

関連する問題