Печать в одной строке с паузой в C

Я хочу, чтобы моя программа что-то напечатала, затем подождите несколько секунд, а затем напечатать что-то еще в той же строке. Я попытался написать это как:

printf ("bla bla bla");
sleep (2);
printf ("yada yada yadan");

но на выходе я жду 2 секунды, а затем я получаю всю строку, напечатанную как одну. Когда я попытался поместить вывод в разные строки, он напечатал с паузой.

Как мне сделать его для печати с паузой в той же строке?

* работа в Linux

2 ответов


printf ("bla bla bla");
fflush(stdout);
sleep (2);
printf ("yada yada yada\n");

fflush заставляет внутренний буфер stdout быть сброшенным на экран.


на stdout является буферизованным потоком по умолчанию, это означает, что вам нужно явно очистить его. Он неявно спускается на newline. Это поведение предписано стандартом C99.

это означает в вашем первом printf текст добавляется во внутренний буфер. Это делается для повышения эффективности, например, при печати большого количества небольших фрагментов текста.

второй printf содержит новую строку, и это заставляет поток сбрасываться. Вы можете прямо заподлицо stdout via fflush(stdout); если вы хотите.

в качестве альтернативы вы также можете использовать unbuffered stderr, как в fprintf(stderr, "bla bla bla");, но как следует из его названия, он предназначен для ошибок и предупреждений.

см. также вопрос SO почему printf не сбрасывается после вызова, если новая строка не находится в строке формата?.