EOF 前的 '\n' 个字符
'\n' characters before EOF
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,因为 fp 只包含 4 个字符,"abcd"。但实际结果是6。在EOF之前有两个换行符是ascii码10。
我仔细检查了 test.txt 文件,它不包含除 abcd 之外的其他字符。这两个换行符是从哪里来的?我使用了 vim 编辑器。
首先,当 getc
可以时,不要使用 scanf
。其次,停止使用 feof
就好像它是魔术一样。 (Why is “while ( !feof (file) )” always wrong?)。第三,"abcd\n" 是 5 个字符,您对 feof
的误用导致您重复使用最后的换行符并多算一个。
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,因为 fp 只包含 4 个字符,"abcd"。但实际结果是6。在EOF之前有两个换行符是ascii码10。
我仔细检查了 test.txt 文件,它不包含除 abcd 之外的其他字符。这两个换行符是从哪里来的?我使用了 vim 编辑器。
首先,当 getc
可以时,不要使用 scanf
。其次,停止使用 feof
就好像它是魔术一样。 (Why is “while ( !feof (file) )” always wrong?)。第三,"abcd\n" 是 5 个字符,您对 feof
的误用导致您重复使用最后的换行符并多算一个。