stdout буферизуется при подключении к терминалу, но я помню, что читал где-то, что чтение (по крайней мере, из stdin) автоматически сбрасывает stdout. Все реализации C, которые я использовал, сделали это, но сейчас я не могу найти его в стандарте.
Имеет смысл, что это работает таким образом, в противном случае код выглядит так:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
потребуется дополнительный fflush(stdout);
Так гарантированно, что stdout будет очищен здесь?
EDIT:
Как уже говорилось в нескольких ответах, в стандарте, по-видимому, нет гарантии , что вывод в stdout в моем примере будет появляться до чтения из stdin, но с другой стороны, это намерение заявлено в (мой бесплатный черновик) стандарт:
Динамика ввода и вывода
интерактивные устройства должны иметь место
как указано в 7.19.3. Намерение
эти требования являются небуферизованными
или линейно-буферизованный вывод появится как только
насколько это возможно, чтобы гарантировать, что побуждение
сообщения на самом деле появляются до
программа ожидает ввода.
(ИСО / МЭК 9899: проект комитета ТК2 - 6 мая 2005 г., стр. 14).
Так что, похоже, гарантии нет, но, вероятно, в любом случае это будет работать в большинстве реализаций. (Знаменитые последние слова ...)