fflush(stdout) Си

У меня есть код, вот фрагмент:

printf("choose (y/n)?");
fflush(stdout);

Почему без fflush(stdout) не выводится на экран данная строка. Точнее выводится только после того, как я что-то напечатаю. Как я поняла, все дело, в том, что нет окончания строки(\n), но можете пожалуйста объяснить, почему это именно так работает.


Ответы (1 шт):

Автор решения: Fat-Zer

Это связано с тем, что стандартные поток ввода, указывающий на «интерактивное устройство» (терминал) в большинстве *nix реализаций является линейно-буферизированным. Подробнее о типах буферизации я уже писал здесь: Буферизация данных в С.

Для линейно-буферизированных потоков кроме конца строки сброс буфера также будет вызываться при его переполнении или чтении из другого линейно-буферизированного потока (чей буфер ввода пуст); так что ожидаемый результат получится и в примере такого рода:

printf("choose (y/n)?");
int answer = getchar(); // вывод произойдёт до или во время вызова `getchar()`
→ Ссылка