c - 需要帮助解决奇怪的 fscanf 问题

标签 c scanf

我试图通过一个 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/

相关文章:

c - scanf 何时将 '\0' 附加到用户输入?

c - 将数据存储到多维数组中

c - 在C中读取文件中的名称

在eclipse juno中使用mingw和MPICH2编译MPI程序

c - 递归阶乘实现的段错误

c - 使用 fopen() 打开的文本文件的内容是否会在堆栈中?

c - 您将如何使用 scanf() 来扫描您之前创建的值?

c - 信号处理程序中更新的变量永远不会更新

python - 错误: value of type 'PyObject' (aka '_object' ) is not contextually convertible to 'bool'

c - While 循环问题和在 C 中重新分配一个 char 变量(初学者)