printf在无限while循环中出现异常行为

6

当我运行下面的程序时,我没有得到任何输出。

#include <stdio.h>

int main()
{
    printf("hello");
    while(1)
    {

    }   
    return 0;
}

如果我编辑printf命令,在字符串末尾添加'\n'字符,那么输出结果就是预期的。但第一段代码中发生了什么?我无法理解。


调用 fflush(stdout),顺便提一下你有一个无限循环。 - Grijesh Chauhan
3
输出被缓存。你需要在字符串末尾加上\n才能打印出来,或者像@GrijeshChauhan建议的那样,在你的printf后使用fflush(stdout)。还有其他可以刷新输出缓冲区的操作,例如输入函数(getcharscanf),但从你的代码片段中不清楚你的循环正在做什么。 - lurker
可能是重复的问题:为什么程序不执行最后的printf语句? - lurker
3个回答

11
这是因为标准输出是行缓冲,即在收集到整行输出之前不会将输出写入设备(终端)。您可以调用fflush(stdout);强制刷新缓冲区到终端。顺便说一下,不要尝试刷新stdin,那是不允许的。

好的,但为什么在没有无限循环并且具有与上面相同的printf的情况下该代码仍然有效呢? - DesirePRG
3
程序在短时间内终止时,操作系统会比没有刷新请求且程序仍在运行时更快地刷新输出缓冲区。 - fkl

2

尝试

printf("hello\n");

或者
printf("hello");
fflush(stdout)

你应该指出 fflush(stdout) 出现在 printf 之后。 - lurker

0

使用 printf("你好\n");

欲了解更多信息,请参见 此问题 的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接