fflush(stdout) Си
У меня есть код, вот фрагмент:
printf("choose (y/n)?");
fflush(stdout);
Почему без fflush(stdout) не выводится на экран данная строка. Точнее выводится только после того, как я что-то напечатаю. Как я поняла, все дело, в том, что нет окончания строки(\n), но можете пожалуйста объяснить, почему это именно так работает.
Ответы (1 шт):
Это связано с тем, что стандартные поток ввода, указывающий на «интерактивное устройство» (терминал) в большинстве *nix реализаций является линейно-буферизированным. Подробнее о типах буферизации я уже писал здесь: Буферизация данных в С.
Для линейно-буферизированных потоков кроме конца строки сброс буфера также будет вызываться при его переполнении или чтении из другого линейно-буферизированного потока (чей буфер ввода пуст); так что ожидаемый результат получится и в примере такого рода:
printf("choose (y/n)?");
int answer = getchar(); // вывод произойдёт до или во время вызова `getchar()`