Tam*_*más 10
代码没有任何问题,但请注意,在许多情况下,输出printf是缓冲的,这意味着只有在显式调用fflush(stdout),打印换行符或缓冲区变满时,输出才会显示在控制台上.由于直到最后才打印换行符,因此在for循环中看不到任何内容,持续40秒(因为printf打印的内容仍然在缓冲区中).然后,当执行命中时printf("\n"),在刷新缓冲区时将立即打印所有内容.
因此,最重要的是:在调用fflush(stdout)之前调用sleep以确保没有任何东西停留在输出缓冲区中,或者等待40秒,最后您将在一个批处理中获得输出.
hangs indefinitely意味着它被卡住或不确定,而这不会发生。您的代码运行良好,在 38 秒 (19 * 2) 后,它会转储从 0 到 19 计数的字符串。但是我怀疑这就是您要执行的操作:
int main()
{
int i;
printf("0 ");
fflush(stdout); // Force the output to be printed
for(i = 1; i <20; ++i)
{
sleep(2);
printf("%d ", i);
fflush(stdout); // Force the output to be printed
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在stdout流缓冲,只会显示当它击中一个换行符'\n',或者如果你想观看“实时”作为您的来电printf(),你需要迫使它刷新缓冲区,这样或那样的。调用fflush(stdout)将执行此操作。