为什么在我的C程序之前,无限循环会阻止printf语句?

为什么在我的C程序之前,无限循环会阻止printf语句?,c,gcc,compilation,printf,C,Gcc,Compilation,Printf,这个C程序打印Done,然后进入一个无限循环 #include <stdio.h> int main(int argc, char const *argv[]) { printf("Done"); while (1) {} return 0; } #包括 int main(int argc,char const*argv[] { printf(“完成”); 而(1){} 返回0; } 但当我运行它时,此代码不会打印Done。为什么会这样?添加fflush

这个C程序打印
Done
,然后进入一个无限循环

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("Done");
    while (1) {}
    return 0;
}
#包括
int main(int argc,char const*argv[]
{
printf(“完成”);
而(1){}
返回0;
}

但当我运行它时,此代码不会打印
Done
。为什么会这样?

添加
fflush(stdout)在您的
printf
语句之后<代码>标准输出默认情况下通常是行缓冲。

它需要刷新缓冲区。通常,控制台输出在收到
'\n'
之前不会刷新

有一个很少用到的函数,
fflush()

#包括
int main(int argc,char const*argv[]
{
printf(“完成”);
fflush(stdout);
而(1){}
返回0;
}

应该为您打印。

标准输出已缓冲。直到其刷新后才会打印(例如,但遇到换行符)

您只需将
'\n'
添加到
printf
调用:

printf("Done\n");
或者通过调用

setbuf(stdout, NULL);
setbuf(stdout, NULL);