как читать что-либо после EOF - PullRequest
0 голосов
/ 27 февраля 2011

Я изучал книгу по программированию на k & r. Есть эта программа для подсчета количества символов на входе

#include<stdio.h>
main()
{
long nc;
nc=0;
while(getchar()!=EOF)
     ++nc;
printf("%ld\n",nc);
}

Мне было интересно, почему после того, как произошло EOF, можно напечатать nc. Есть ли способ к этому.

Ответы [ 4 ]

2 голосов
/ 27 февраля 2011

Условие конца файла влияет только на stdin, а не stdout. Обратите внимание, что stdin не используется после того, как EOF найден, просто распечатайте на stdout.

0 голосов
/ 22 мая 2011

Вы не должны рассчитывать на Ctrl-Z или любой терминатор Если бы вы рассчитывали на это и работали на традиционных * nix-оболочках, вы бы приостановили свой процесс, а не прекратили ввод (прочитайте, например, JOB CONTROL, в man bash)

(я знаю, что этот ответ приходит с некоторым опозданием, но я вижу, что вы продолжаете упоминать Ctrl-Z в своих ответах на другие ответы)

Если вы работаете в системе * nix, вы можете использовать Ctrl-D, но не ожидайте, что это попадет в ваш поток ввода (он просто используется в качестве механизма сигнализации) .m Вы также можете проверить это с помощью файла, должен дать вам более последовательные результаты, чем печатать, например

a.out < prog.c

для подсчета строк в вашей c-программе

0 голосов
/ 27 февраля 2011

getchar () читает из стандартного ввода.printf () пишет в стандартный вывод.Это разные потоки, которые обычно отображаются на одно и то же физическое устройство (консоль или терминал).

0 голосов
/ 27 февраля 2011

Я думаю, что вы смешиваете две разные вещи. EOF касается ввода. printf - это функция вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...