Раздел 7.9.13/7
of c99
гласит, что:
При запуске программы три текстовых потока предопределены и их явно не нужно открывать - стандартный ввод (для чтения обычного ввода), стандартный вывод (для записи обычного вывода) и стандартная ошибка (для записи диагностического вывода).
Как первоначально было открыто, стандартный поток ошибок не полностью буферизирован; стандартные входные и стандартные выходные потоки полностью буферизуются тогда и только тогда, когда можно определить поток, чтобы не ссылаться на интерактивное устройство.
Итак, это имеет смысл. Если вы нажимаете свой стандартный вывод на файл, вы хотите, чтобы он полностью буферизировался для эффективности.
Но я не могу найти упоминания в стандарте о том, является ли вывод строковым буфером или небуферизованным, если вы не можете определить, что устройство не является интерактивным (т.е. нормальным выходом на терминал).
Я прошу прокомментировать мой ответ здесь, что я должен вставить fflush(stdout);
между двумя утверждениями:
printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
потому что я не завершал printf
символом новой строки. Может кто-нибудь прояснить это?