我试图通过一个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()中打开/关闭文件,我在另一个函数中执行此操作,这是否会导致问题?
答案 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);
}