printf()
записи к stdout
(поток вывода по умолчанию), который обычно является буферизованной строкой. Буфер не сбрасывается, к этому времени sleep
назван так, ничто не отображено, когда программа выходит, все потоки автоматически сбрасываются, который является, почему это печатает прямо перед выходом. Печать новой строки будет обычно заставлять поток быть сброшенным, альтернативно Вы могли использовать эти fflush
функция:
int main(void)
{
printf(" I like cows.\n");
sleep(5);
return 0;
}
или:
int main(void)
{
printf(" I like cows.");
fflush(stdout);
sleep(5);
return 0;
}
, Если Вы печатаете к потоку, который не является буферизованной строкой, как может иметь место, если stdout
перенаправляется или Вы пишете в файл, просто печатение новой строки, вероятно, не будет работать. В таких случаях необходимо использовать fflush
, если Вы хотите данные, записанные сразу.
Ваша проблема состоит в том, что printf (и что-либо еще, что пользуется stdio библиотекой для записи в stdout (стандартный вывод)) буферизуется - строка, буферизованная, если это переходит к консоли и размеру, буферизованному, если это переходит к файлу. Если Вы сделаете fflush(stdout);
после эти printf
, то это сделает то, что Вы хотите. Вы могли попытаться просто добавить новую строку ('\n') к Вашей строке, и это сделает правильную вещь, пока Вы не перенаправляете стандартный вывод в файл.
я не на 100% уверен, но я думаю stderr
, не буферизуется, который может вызвать беспорядок, потому что Вы могли бы видеть, производит Вас сделанный к stderr
, прежде чем произведено, Вы ранее сделали к stdout
.
Буферизация средств, что весь вывод хранится в месте (названный буфером) и производится после определенного количества данных, присутствует в нем. Это сделано по причинам эффективности.
Некоторые (большинство?) реализации очищают буфер после новой строки при записи в консоль, таким образом, можно также попробовать
printf(" I like cows.\n");
вместо вызова для сбрасывания ()