Вот некоторые C код:Printf на Linux против Windows,
int i;
printf("This text is printed\nThis text is not until the for loop end.");
for (i = 5; i > 0; i--)
{
printf("%d", i);
sleep(1);
}
Почему остальная часть текста после '\n'
не печатается перед начать цикл for
? Даже printf внутри цикла for печатается только после конца цикла. Если я положил '\n'
в конце текста, он печатает, но я не хочу новой строки.
Это происходит только в Linux, а не в Windows (только что сменил sleep (1) на Sleep (1000) и добавил windows.h).
Ответ дан: http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin – dcaswell
Windows и Linux имеют очень разные драйверы вывода консоли. В Linux вывод буферизуется до тех пор, пока '\ n' не произойдет в случае вашей программы. – lurker
Почему, по-вашему, вам не нужна новая строка в конце вашего вывода? Должна быть причина, по которой вы (и многие другие программисты Windows) не выводите ее, но, похоже, это странно для программистов Unix (например, я) - так же, как вывод, что вывод строки новой строки кажется странным для программистов Windows. В Unix вы делаете это, чтобы удостовериться, что выход произведен - так что для этого есть веская причина. В Windows, по-видимому, режим по умолчанию соответствует небуферизированному, поэтому все выходные данные генерируются по завершении вызова. –