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