stdout和printf的行为

时间:2016-04-08 06:56:54

标签: c printf

只需看下面的程序,

#include <stdio.h>
int main()
{
    printf("hai");
    while(1);
}

上面的代码并没有打印hai和它只是在等待。但是,如果我添加

printf("hai\n"); 

它的工作。

我能否知道内部发生了什么?

3 个答案:

答案 0 :(得分:0)

由于换行符的原因,写printf("hai\n");会导致输出缓冲区被刷新,因此您将在进入无限循环之前看到输出。还有其他方法可以刷新输出缓冲区,但附加换行符特别简单。

从技术上讲,像while(1);这样的紧密循环的行为在C中是 undefined ,但这不太可能是导致问题的原因。

答案 1 :(得分:0)

printf("hai");无法显示某些内容,您需要使用stdoutprintf("\n");

来刷新fflush(stdout);的缓冲区

答案 2 :(得分:0)

您的标准输出流(stdout)是缓冲的,因此只有在手动强制或收到换行符('\n')时才会刷新(并显示其中的内容)。

您可以使用库函数setbuf()

更改此行为

您还可以使用fflush(stdout);

手动清除缓冲区(强制它显示当前其中的内容)