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