' \ n' EOF前的字符

时间:2015-04-03 12:57:28

标签: c file vim 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 cuz fp只包含4个字符,“abcd”。但实际结果是6.在EOF之前有两个换行符,即ascii代码10。

我仔细检查了test.txt文件,它不包含其他字符,然后是abcd。这2个换行符来自哪里?我使用了vim编辑器。

1 个答案:

答案 0 :(得分:2)

首先,scanf执行时不要使用getc。其次,停止使用feof,就像它是魔术一样。 (Why is “while ( !feof (file) )” always wrong?)。第三," abcd \ n"是5个字符,而您滥用feof会导致您重复使用最终换行符和超量计算。