只需看下面的程序,
#include <stdio.h>
int main()
{
printf("hai");
while(1);
}
上面的代码并没有打印hai和它只是在等待。但是,如果我添加
printf("hai\n");
它的工作。
我能否知道内部发生了什么?
答案 0 :(得分:0)
由于换行符的原因,写printf("hai\n");
会导致输出缓冲区被刷新,因此您将在进入无限循环之前看到输出。还有其他方法可以刷新输出缓冲区,但附加换行符特别简单。
从技术上讲,像while(1);
这样的紧密循环的行为在C中是 undefined ,但这不太可能是导致问题的原因。
答案 1 :(得分:0)
printf("hai");
无法显示某些内容,您需要使用stdout
或printf("\n");
fflush(stdout);
的缓冲区
答案 2 :(得分:0)
您的标准输出流(stdout)是缓冲的,因此只有在手动强制或收到换行符('\n'
)时才会刷新(并显示其中的内容)。
您可以使用库函数setbuf()
更改此行为您还可以使用fflush(stdout);