在C中不需要带有printf的fflush(stdout)?

在C中不需要带有printf的fflush(stdout)?,c,fflush,C,Fflush,到目前为止,我在使用printf时使用fflush(stdout)而不使用\n,因为我们必须刷新缓冲区 但我发现下面的代码也可以正常工作 #include <stdio.h> int main(void){ printf("hello world"); // without fflush(stdout) } // output: "hello world" #包括 内部主(空){ printf(“你好世界”); //无fflush(标准输出) } //输出:“你

到目前为止,我在使用
printf
时使用
fflush(stdout)
而不使用
\n
,因为我们必须刷新缓冲区

但我发现下面的代码也可以正常工作

#include <stdio.h>

int main(void){
    printf("hello world");
    // without fflush(stdout)
}

// output: "hello world"
#包括
内部主(空){
printf(“你好世界”);
//无fflush(标准输出)
}
//输出:“你好,世界”

编译器的结果是否不同?还是我误解了什么?

在正常退出时,缓冲区会被刷新。缓冲区会在以下几种情况下自动刷新:(1)当缓冲区已满时,(2)当您打印
\n
字符时,输出将发送到“终端”(例如,未重定向到文件),(3)当程序退出时,以及(4)在某些系统中,至少在程序等待输入时(这意味着刷新任何提示都是好的)。如果这些都不是真的,您只需要显式调用
fflush(stdout)
。@SteveSummit感谢您的评论,那么提到在不使用fflush(stdout)的情况下使用printf将输出错误的示例部分正确吗?(当然他们强调使用fflush)对不起,我不太明白你的问题。我不知道你们在谈论哪些示例,也不知道“输出错误”是什么意思。@jwkoo学生经常遇到的问题是他们写“printf(输入一个数字):”;scanf(“%d”,&number)`,他们想知道为什么他们的提示没有出现。(因为,我想,并不是所有系统都实现上面列表中的第4个。)在正常退出时,缓冲区会被刷新。缓冲区会在以下几种情况下自动刷新:(1)当缓冲区已满时,(2)当您打印
\n
字符并且输出到“终端”(例如,未重定向到文件),(3)当程序退出时,以及(4)在某些系统中,至少在程序等待输入时(这意味着刷新任何提示都很好)。如果这些都不是真的,您只需要显式调用
fflush(stdout)
。@SteveSummit感谢您的评论,下面的示例提到在没有fflush(stdout)的情况下使用printfwill output error是部分正确的?(当然他们强调使用fflush)对不起,我不太理解你的问题。我不确定你在谈论哪些示例,也不确定“will output error”是什么意思。@jwkoo学生经常遇到的问题是他们写“printf”(“输入一个数字”);scanf(“%d”和&number)`,他们想知道为什么他们的提示没有出现。(因为,我想,并不是所有系统都实现上面列表中的#4。)