2016-12-22 6 views
0

テキストファイルからいくつかの値を読み込み、それらの平均値を見つけるために以下のコードを書きましたが、何らかの理由でwhileループに入ったときにファイルがどこで終わるかはわかりません。なぜそれが起こるのか、どうすればそれから出ることができるのか教えていただければ幸いです。ありがとうございました。ファイルから値を読み取っているときにループ外に出ることができない

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

main(){ 
int total, grade, n; 
float a; 

total = 0; 
n = 0; 

FILE *file; 
file = fopen("grades.txt", "r"); 

if((file = fopen("grades.txt", "r")) == NULL) { 
    puts("Error"); 
    exit(0); 
} 
while (!(feof(file))) { 
    if (!(fscanf(file, "%d",&grade) ==-1)){ 
     total = total + grade; 
     n++; 
     printf("%d\n", total); 
    }  
    else { 
     break; 
    } 
} 
fclose(file); 
a = total/n; 
printf("The average is %f", a); 
getch(); 
} 
+0

数字以外の予期しない文字が含まれています。例えば、「88.5」は小数点を含む。 – BLUEPIXY

+1

無限ループには関係ありません.fopenを冗長呼び出ししています。 – codeforester

答えて

3

あなたのコードは、ファイルの終わりを扱う問題はないが、それは終端からループを防止し、別の問題が、あります。scanf関数はゼロを返したときに、それが処理するための有効な入力がなかったので、ループは継続永遠に走っている。

この問題を解決するためにscanfが1以外の値を返したときにループを停止するように条件を変更します。

+0

あなたの答えをありがとうが、私はあまりにも仕事をしたことが判明した。私はまた私の友人に尋ねたところ、私の問題はコードではなくテキストファイルにあると指摘しました。私のコードが整数を探している間、私のファイル内の数字は浮動小数点でした。だから私は整数に変更したとき、何とかそれが必要なときに終了しました。 –

0

変更した場合は((関数fscanf(ファイル、 "%d個"、&グレード)==! - 1)) にに(関数fscanf(ファイル、 "%d個"、&グレード)== 1)であれば、それを試してみてください。 または(等級== -1) のようにelse条件を作成してください。 が壊れています。

関連する問題