我有一个带有数字行的文本文件,例如
5 6 3 2 10 4 6
18 49 40 9 17 40 0
当我读入文件时,它不会在文件末尾停止。循环读取的代码如下 -
while ((fscanf(spFile, "%d", &scores[i][j])) == 1 && spFile != EOF) {
printf("%d ", scores[i][j]);
if(j == 8) {
i++;
j = 0;
printf("\n");
} else {
j++;
}
numOfStudents++;
}
最大行数是50(所以一个50的数组(必须将其作为数组而不是指针))并且我有numOfStudents来计算行数,当它完成时它说50当它真的只有2
谢谢!
答案 0 :(得分:2)
fscanf()将返回0或EOF。
您也可以使用“feof()”功能。
文件指针变量spFile 永远不会等于EOF。 “EOF”是由C运行时管理的状态,它不是文件指针本身。
答案 1 :(得分:0)
循环的条件应该是这样的:
while (fscanf(spFile, "%d", &scores[i][j]) > 0){
/* Do Stuff */
}
或者,为了避免无法解析输入的情况:
while (!feof(spFile) && fscanf(spFile, "%d", &scores[i][j]) > 0){
/* Do Stuff */
}
答案 2 :(得分:0)
尝试检查fscanf()
返回的字节数是否大于0
:
while(fscanf(...) > 0) {
/* do something */
}
错误检查是这样的:
while(1) {
fscanf( .. );
if(feof(fp)) {
if(ferror(fp)) {
/* stoped because an error check out errno */
}
break;
}