我试图通过一个 while 循环来逐行读取文件,该循环指示一旦达到 EOF 就退出。但是由于某种原因,一旦读取了最后一行并再次检查 while 条件,程序就会卡住。
这是我的代码:
char character1;
int number1;
while(fscanf(file,"%s %d",&character1, &number1) != EOF){
//printf("%s %d\n",character1,number1)
}
我的文件内容:
A 1
B 2
C 3
D 4
E 5
输出:
A 1
B 2
C 3
D 4
E 5
| <---Blinking terminal pointer currently there
谁能帮我解决这个问题?
编辑:我没有在 main() 中打开/关闭文件,我是在另一个函数中执行的,这会导致问题吗?
最佳答案
改进 while 循环的条件检查。 fscanf() 可以产生比 EOF 或正数更多的结果。当转换开始后发生文件结束时,它也可以返回一个正数。这意味着您在转换时遇到了问题,因此下次您循环以从流中获取更多数据时,数据仍然存在。因此,您将无限期地陷入无法转换同一个失败转换的困境。
您正在寻找 2 个输入项,因此请检查 fscanf() 是否已找到 2 个输入项以便继续循环。
关于c - 需要帮助解决奇怪的 fscanf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36237594/