2015-04-03 8 views
0
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 

Я попытался подсчитать, сколько времени делает это в то время как цикл идти распечатав число п. Я думал, что результат будет 4 cuz fp содержит только 4 символа, «abcd». Но фактический результат был 6. Есть два символа новой строки, который является кодом ascii 10 перед EOF.

Я дважды проверил файл test.txt и не содержит другого символа, а затем abcd. Откуда появились эти 2 символа новой строки? Я использовал редактор vim.

+1

Вы используете 'feof' неправильно: http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong –

+0

fprintf ("% c ", ch); следует заменить printf ("% c", ch); – Anshul

+0

oh yes thx. просто проигнорируйте это fprintf. Ошибка Ctrl + V. –

ответ

2

Во-первых, не используйте scanf когда getc сделаю. Во-вторых, прекратите использовать feof, как будто это волшебство. (Why is “while (!feof (file))” always wrong?). В-третьих, «abcd \ n» составляет 5 символов, а ваше неправильное использование feof заставляет вас повторно использовать окончательную новую строку и перераспределение на единицу.

+0

Я даже не нажал enter после этого d, и все еще это abcd \ n? –

+0

@Castle_Dust Некоторые редакторы вставляют вам новую строку. Попробуйте 'wc -c test.txt', чтобы получить счет и' xxd test.txt', чтобы увидеть содержимое. –