为什么无限循环在我的C程序中先前阻塞了printf语句?

时间:2015-09-30 21:12:56

标签: c gcc compilation printf

此C程序打印Done,然后进入无限循环。

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("Done");
    while (1) {}
    return 0;
}

但是当我运行它时,此代码打印Done。那是为什么?

3 个答案:

答案 0 :(得分:3)

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

这有一个很少使用的功能,fflush()

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("Done");
    fflush(stdout);
    while (1) {}
    return 0;
}

那应该打印给你。

答案 1 :(得分:3)

stdout是缓冲的。它不会打印直到它被刷新(例如,但是击中换行符)。

您只需在'\n'来电中添加printf

printf("Done\n");

或通过调用

禁用其缓冲
setbuf(stdout, NULL);

答案 2 :(得分:2)

fflush(stdout);声明后添加printfstdout默认情况下通常是行缓冲的。