从文件中读取值时无法离开循环

时间:2016-12-22 23:08:14

标签: c while-loop

我已经编写了下面的代码来从文本文件中读取一些值,然后找到这些数字的平均值,但由于某些原因,当它在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();
}

2 个答案:

答案 0 :(得分:3)

您的代码处理文件末尾没有问题,但它有另一个问题,它阻止循环终止:当scanf返回零时,因为没有有效的输入要处理,循环继续运行。< / p>

当scanf返回1以外的任何值时,更改条件以停止循环以解决此问题。

答案 1 :(得分:0)

更改if(!(fscanf(file,“%d”,&amp; grade)== - 1))        if(fscanf(file,“%d”,&amp; grade)== 1)并尝试一下。 或者做出其他条件 if(等级== -1)         打破;