在此代码中:
#include<stdio.h>
int main()
{
printf("I");
printf("am");
printf("a");
printf("good");
printf("boy");
return 0;
}
为什么我不必每次都使用fflush(stdout)
?我的意思是如果没有新行,如何在控制台中打印字符串(因为新行刷新了输出缓冲区)。或者缓冲区是否已满,所以我不明确地这样做?如果是这样的话? / p>
答案 0 :(得分:4)
请注意,stdout
流是缓冲的,因此迈克尔评论说,当程序退出时,您将看到输出( )。如果您想立即打印输出,可以使用fprintf
之类的
fprintf(stderr, "my Text");
参见ISO C99第7.19.3 / 3节:
如果未缓冲流,则会显示字符 来源或目的地尽快。除此以外 字符可以被累积并发送到主机或从主机发送 环境作为障碍。
当流完全缓冲时,字符应该是 当缓冲区时,作为块传输到主机环境或从主机环境传输 充满了。
当流被缓冲时,字符应该是 当换行时,作为块发送到主机环境或从主机环境发送 遇到了角色。
此外,字符旨在作为块传输 当填充缓冲区时,请求输入时的主机环境 在无缓冲的流上,或在缓冲的行上请求输入时 需要从主机传输字符的流 环境。
对这些特性的支持是实现定义的,并且可能 受到setbuf和setvbuf函数的影响。