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

时间:2016-03-26 16:11:29

标签: 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()中打开/关闭文件,我在另一个函数中执行此操作,这是否会导致问题?

2 个答案:

答案 0 :(得分:1)

改进while循环的条件检查。 fscanf()可以产生更多的结果,即EOF或正数。当转换开始后文件结束时,它也可以返回正数。这意味着您在转换时出现问题,因此下次循环时数据仍然存在,以便从流中获取更多数据。所以你无法无法转换同样失败的转换。

您正在寻找2个输入项,因此请检查fscanf()是否找到了2个输入项以继续循环。

答案 1 :(得分:0)

问题是你的fscanf在每一行的末尾读取\ r或\ n。只需创建一个缓冲区来忽略它,就可以了。我做了以下工作,工作顺利。

char character1;
int number1;
char buffer[2]; // will read the end of line

while(fscanf(file,"%c %d",&character1, &number1) != EOF){
    fgets(buffer, 2, file);// does the job
    printf("[%c] [%d]\n",character1,number1);
}