EOF добавляет в счетчик, понятия не имею, почему

Я застрял, пытаясь понять, почему запуск eof использование Ctrl-D добавляет к счетчику в for петля.

Вот мой код:

#include <stdio.h>
int main()
{
    double nc;
    for (nc = 0; getchar() != EOF; nc++){
       getchar();
    }
    printf("%.0f\n", nc);
    return 0;
}

Мой результат:

0
1
2
3
4
5
6
7
8

8 это то, что мне дают, когда я использую Ctrl-D после ввода 7, Есть ли причина, почему запуск eof заставляет код выполнить еще один полный цикл? Я думал, что пустой буфер ничего не вернет.

1 ответ

Решение

Вот то, что вы можете пропустить. Возьми кусок своего кода:

for (nc = 0; getchar() != EOF; nc++)
    getchar();

Есть два getchar(), Давайте позвоним им, getchar1() а также getchar2(), Ваш вклад должен быть таким:

0\n
.
.
.
7\n
EOF

getchar1() поймать последовательность цифр и EOF, getchar2() всегда ловить новую строку ('\n'). И количество проходов для тела цикла равно 8 (от 0 до 7).

Надеюсь, что это полезно для вас.

Другие вопросы по тегам