07缓冲区与回车\r和换行\n


缓冲区

缓冲区(buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

所以对于下面的程序:
在这里插入图片描述

程序会先休眠5秒,然后打印字符串hello之后结束运行。

这是因为在执行printf时,字符串hello被写入到了C程序的缓冲区中,但并没有输出到显示器上,执行完sleep后,缓冲区中的内容才被刷新到显示器上。

缓冲区的刷新策略为:行刷新、程序结束、强制刷新
上面这种情况属于程序结束时刷新,如果给printf时加上\n则属于行刷新
在这里插入图片描述

行刷新就会先把hello刷新到显示器上,然后再休眠5秒。

强制刷新则可使用函数fflush(stdout)
在这里插入图片描述

C语言程序中,在默认情况下会打开三个文件(也可以叫作三个设备):FILE*stdin(标准输入),FILE*stdout(标准输出),FILE*stderr(标准错误)

在这里插入图片描述

默认打开这三个文件是为了让使用者和程序更好的交互,如果不输出到显示器上使用者根本就不知道这个程序是什么情况。


回车\r和换行\n

\r: 回车,使光标回到本行行首。
\n: 换行,使光标下移一格。

而我们键盘上的Enter键实际上就等价于\n+\r
VS中的\n也等价于\n+\r

在这里插入图片描述

通过回车符就可以实现简易的进度条:

#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
	 int i = 0;
	 char bar[102];
	 memset(bar, 0 ,sizeof(bar));
	 const char *lable="|/-\\";
	 while(i <= 100 ){
	 printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%4]);
	 fflush(stdout);
	 bar[i++] = '#';
	 usleep(10000);
 }
	 printf("\n");
	 return 0;
}

这里的usleep单位是微秒(千分之一毫秒),sleep单位是秒。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也要写bug、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值