char ch;
int n = 0;
FILE* fp;
fp = fopen("test.txt", "r");
while(!feof(fp)){
n++;
fscanf(fp, "%c", &ch);
fprintf("%c", ch);
}
printf("%d\n", n);
下面的test.txt
abcd
我试着通过打印整数n来计算这个while循环的时间。我认为结果将是4 cuz fp只包含4个字符,“abcd”。但实际结果是6.在EOF之前有两个换行符,即ascii代码10。
我仔细检查了test.txt文件,它不包含其他字符,然后是abcd。这2个换行符来自哪里?我使用了vim编辑器。
答案 0 :(得分:2)
首先,scanf
执行时不要使用getc
。其次,停止使用feof
,就像它是魔术一样。 (Why is “while ( !feof (file) )” always wrong?)。第三," abcd \ n"是5个字符,而您滥用feof
会导致您重复使用最终换行符和超量计算。