stdout
является потоком с линейной буферизацией по умолчанию, это означает, что вам необходимо явно очистить его. Это неявно сбрасывается на новую строку. Такое поведение предписано стандартом C99.
Это означает, что в вашем первом printf
текст добавляется во внутренний буфер. Это сделано для повышения эффективности, например, при печати большого количества небольших текстовых фрагментов.
Ваш второй printf
содержит символ новой строки, и это приводит к сбросу потока. Вы можете явно сбросить stdout
через fflush(stdout);
, если хотите.
В качестве альтернативы вы также можете использовать небуферизованный stderr, как в fprintf(stderr, "bla bla bla");
, но, как следует из его названия, он предназначен для ошибок и предупреждений.
См. Также вопрос SO Почему printf не сбрасывается после вызова, если в строке форматирования нет новой строки? .