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