它总是在最后打印一个额外的字符。代码如下:
#include <stdio.h>
int main ()
{
char bit;
FILE *fp_read,*fp_write;
fp_read = fopen("test.txt","r");
if(fp_read==NULL) {
printf("Error!! Unable to open the file!!");
return 1;
}
while(!feof(fp_read)) {
fscanf(fp_read,"%c",&bit);
printf("%c",bit);
}
fclose(fp_read);
return 0;
}
如果test.txt包含010101,则会打印0101011。如果00110打印001100。如果它包含abc,它会打印abcc。这意味着它总是重复最后一个字符。
怎么了?有人能解释吗?
最佳答案
我无法重现这个错误。
请参阅原始帖子中的David Bowling的第一条评论,以获得一个简洁的解释。
cppreference page for feof的版本较短。
eof函数只报告最新I/O操作报告的流状态,而不检查关联的数据源。例如,如果最近的I/O是返回文件最后一个字节的fgetc,则feof返回零。下一个fgetc失败并将流状态更改为文件结尾。只有当feof返回非零时。
在典型用法中,输入流处理在任何错误时都会停止;然后使用feof和feror来区分不同的错误条件。
这意味着在while循环中使用feof可能不合适。文件的最后一个字符可能是垃圾,在不同的系统中会有所不同。
试着这样做吧。
while(fscanf(fp_read,"%c",&bit) != EOF) {
printf("%c",bit);
}
关于c - fscanf在末尾扫描额外的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43954011/