关于printf()函数的缓冲区问题

Posted qq1028152659

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于printf()函数的缓冲区问题相关的知识,希望对你有一定的参考价值。

只有当一下三种情况printf()的缓冲区才会自动刷新。输出到屏幕。

1.缓冲区满的时候。

2.遇到换行符的时候。

3.需要输入的时候。

 

当程序正常结束时,属于该程序的缓冲区也将被清空(刷新);

举个例子借助理解一下:

#include <stdio.h>
int main(){
    printf("begin\\n");
    for(int i=0;i<=10;i++){
        printf("a");
        if(i==5)
            while(1);
    }
    return 0;
    
}

这个代码的输出情况是这样的:

技术分享图片

当第一个输出。缓冲区遇到\\n换行符时,直接输出了begin

而当for循环中,i从1-5的输出printf并没有换行符也没有要输入。所以缓冲区一直没刷新。没能将数据传给显示设备。然后遇到while(1)死循环。缓冲区不会遇到刷新条件。没有输出了。。

 

有一点要注意的事。windows下的printf和cout是没有缓冲的。。所以以上的问题不适于windows.

windows会直接输出

技术分享图片

 

 

今天写这个是想到以前遇到的一些printf()问题。。以为是玄学。。只不过是触及到了知识盲区罢了。。

 

相关的知识可以参考这篇博客,写得更为详细:https://blog.csdn.net/qq_20240999/article/details/59056484

 

以上是关于关于printf()函数的缓冲区问题的主要内容,如果未能解决你的问题,请参考以下文章

printf缓冲区刷新问题

linux中fflush函数和printf函数

Linux C语言printf()函数不加换行符就不能输出打印的内容(fflush(stdout) 刷新缓冲区)

Linux C语言printf()函数不加换行符就不能输出打印的内容(fflush(stdout) 刷新缓冲区)

关于代码片段的时间复杂度

关于printf()