Почему оператор printf не выполняется здесь после ввода некоторого текста и нажатия клавиши «ввод» (EOF)? - PullRequest
2 голосов
/ 09 ноября 2010

Код, полученный из "Языка программирования C, второе издание":

#include <stdio.h>

main()
{
  long nc;

  nc = 0;
  while(getchar() != EOF)
    ++nc;
  printf("%s: %ld\n", "number of characters", nc); 
}

Почему оператор "printf" не выполняется после нажатия клавиши "ввод" (EOF)?

Ответы [ 2 ]

6 голосов
/ 09 ноября 2010

Клавиша ввода - , а не EOF.В зависимости от вашей системы он отправит возврат каретки (0x0D или '\r'), перевод строки (0x0A или '\n') или оба.

В Linux (и, вероятно, Unix) EOF может бытьотправлено Ctrl + D.В Windows это должны быть Ctrl + Z (но вам может понадобиться нажать Enter после этого).

1 голос
/ 09 ноября 2010

Если вы хотите выполнить это printf после нажатия клавиши ENTER , вы должны изменить его с:

while(getchar() != EOF)

на:

while(getchar() != '\n')

EOF (конец файла) - это не то же самое, что ENTER.

И, возможно, вы захотите получить более актуальную книгу.

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