关于printf的行缓冲问题

#include <stdio.h>

void f()
{
        int i ;
        for(i = 0;i < 10;i++)
                printf("%5d", i);
        putchar('\n');
}

int main(int argc, char* argv[])
{
        f();
        while(1);
        return 1;
}

输出:    0    1    2    3    4    5    6    7    8    9

#include <stdio.h>

void f()
{
        int i ;
        for(i = 0;i < 10;i++)
                printf("%5d", i);
       //putchar('\n');
}

int main(int argc, char* argv[])
{
        f();
        while(1);
        return 1;
}

输出为空


用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。


1. 使用fflush(stdout)强制刷新。

2.缓冲区已满。

3.scanf()要在缓冲区里取数据时会先将缓冲区刷新。

4.\n,\r进入缓冲区时。

5.线程结束的时候,如果该线程里也有printf(....);

6. 程序结束时。

(答案来源于网络:http://bbs.csdn.net/topics/390324873)

linux下是这样,windows下可以直接输出,和二者的实现策略有关系。

你可能感兴趣的:(关于printf的行缓冲问题)