C语言printf()打印时,缓存区的问题

2020-03-27  本文已影响0人  dk_qi

例1

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("a");
    printf("b");
    sleep(5);
    printf("c");
    printf("d");
    return 0;
}

这段代码字面上看,是先输出ab,然后等待5秒,再输出cd
然而实际上:

GIF 2020-3-27 21-37-34.gif
它在运行时没有直接输出ab,等5秒,而是直接5秒后一次性输出abcd。这是因为printf在打印到标准输出时,先写到缓冲区,直到遇到\n或者\r才会刷新缓存区,打印到屏幕上。

刷新缓冲区的条件:

  1. 缓冲区填满;
  2. 写入的字符中有‘\n’, '\r';
  3. 调用fflush手动刷新缓冲区;
  4. 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新。

下面例子来进行演示:

例2

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("a");
    printf("b");
    fflush(stdout);
    sleep(5);
    printf("c");
    printf("d");
    return 0;
}
GIF 2020-3-27 21-52-25.gif

其它情况大家可自己测试。

上一篇 下一篇

猜你喜欢

热点阅读