printf函数输出问题

printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有以下三种情况满足,才会输出到屏幕。

  1. 缓冲区满了
  2. 强制刷新缓冲区
  3. 程序结束时

1.缓冲区满

这里没法举例说明,因为缓冲区可能有 几M大小 (滑稽)。

2.强制刷新缓冲区

  1. 使用 fflush来刷新

示例:原程序

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

int main(void)
{
    printf("hello world");
    sleep(5);
    exit(0);
}

在程序结束,即睡了五秒后,才显示出要打印的
在这里插入图片描述
在这里插入图片描述

使用fflush:

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

int main(void)
{
    printf("hello world");
    fflush(stdout);
    sleep(5);
    exit(0);
}

这里在printf语句结束后,使用fflush强制刷新缓冲区,就先打印出来内容,再执行的 sleep语句。
在这里插入图片描述
在这里插入图片描述

  1. 使用 '\n’

示例:

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

int main(void)
{
    printf("hello world\n");
    //fflush(stdout);
    sleep(5);
    exit(0);
}

运行:
使用换行符,也会刷新缓冲区,再sleep.
在这里插入图片描述

3.程序结束时

就像上面的示例:

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

int main(void)
{
    printf("hello world");
    sleep(5);
    exit(0);
}

等到程序结束时候,printf的内容才显示出来。
在这里插入图片描述
在这里插入图片描述

Logo

更多推荐