Строка stdout буферизована, небуферизована или неопределена по умолчанию?

Раздел7.9.13/7 изc99 говорится, что:

При запуске программы три текстовых потока предопределены и не требуют явного открытия - стандартный ввод (для чтения обычного ввода), стандартный вывод (для записи обычного вывода) и стандартная ошибка (для записи диагностического вывода).

При первоначальном открытии стандартный поток ошибок не полностью буферизован; стандартные входные и стандартные выходные потоки полностью буферизуются тогда и только тогда, когда можно определить, что поток не ссылается на интерактивное устройство.

Так что это имеет смысл. Если вы помещаете стандартный вывод в файл, вы хотите, чтобы он был полностью буферизован для эффективности.

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

Причиной, по которой я спрашиваю, был комментарий к моему ответуВот что я должен вставитьfflush(stdout); между двумя утверждениями:

printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }

потому что я не прекращалprintf с новой строкой. Кто-нибудь может это прояснить?

Ответы на вопрос(1)

Ваш ответ на вопрос