它总是在最后打印一个额外的字符。这是代码:
#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。这意味着它总是重复最后一个角色。
有什么问题?谁能解释一下?
答案 0 :(得分:0)
我无法重现错误。
请参阅David Bowling在原帖中的第一条评论,以获得简洁的解释。
cppreference page for feof版本较短。
eof函数仅报告最近I / O操作报告的流状态,它不检查关联的数据源。例如,如果最近的I / O是fgetc,它返回文件的最后一个字节,则feof返回零。下一个fgetc失败并将流状态更改为文件结尾。只有那时feof返回非零。 在典型的使用中,输入流处理在任何错误上停止;然后使用feof和ferror来区分不同的错误条件。
这意味着在while循环中使用feof可能不合适。文件中的最后一个字符可能是垃圾,在不同的系统中会有所不同。
尝试这样做。
while(fscanf(fp_read,"%c",&bit) != EOF) {
printf("%c",bit);
}