在C中,有时在我打印换行符\n
之前,我的输出不会打印到终端。例如:
int main()
{
printf("Hello, World");
printf("\n");
return 0;
}
Hello World将在下一个printf
之前打印(我知道这是通过在gdb中设置断点)。有人可以解释为什么会发生这种情况以及如何绕过它?
谢谢!
答案 0 :(得分:8)
出于性能原因这样做:将数据传递到控制台太昂贵(就执行速度而言)逐个字符地执行。这就是输出被缓冲直到打印换行的原因:字符被收集在一个数组中,直到打印时为止,此时整个字符串被传递到控制台。您还可以显式强制输出,如下所示:
fflush(stdout);
答案 1 :(得分:4)
除了fflush()
,您还可以使用setvbuf(3)设置缓冲选项。