Linux的第一个小程序: 进度条

平常我们在linux下安装软件或者用yum安装一条新的指令的时候,都会出现这样的进度条

在这里插入图片描述
在实现它之前,我们首先需要具备的基础知识是区分换行和回车

换行 \n
回车 \r
很多童鞋会以为二者并没有很大的区别,其实还是有点区别的

在这里插入图片描述
在这里插入图片描述

但是我们平常使用换行的时候,也不是从上一行的结尾位置直接换到下一行开始打印,而是换到下一行的行首,这是因为这里默认\n为回车换行

再来看看两段代码

在这里插入图片描述
在这里插入图片描述

思考以上两个代码的输出结果,第一个输出有换行,第二个输出没有换行
结果:第一个先打印"hello world",然后休眠3s
第二个先休眠,后打印出来"hello world"
为什么会出现这样的结果呢?按道理执行代码都是从上往下执行的,而两段代码中打印语句都在休眠函数的前面,那么为什么会出现第二种情况呢?
只有一个原因,第二段代码中printf语句早已执行完,只不过没有被立马显示出来。

原来c语言会给我们提供输出缓冲区,根据特定的刷新策略,来进行刷新。而显示器设备,一般的刷新策略是行刷新,碰到\n,就会把\n之前的所有字符全部显示出来。第二段代码没有遇到\n,所以字符没有立马显示出来。
要想显示出来要加上 fflush(stdout);

在这里插入图片描述

加上后要打印的语句就会被立即显示出来

我们要实现进度条,是要在一行上不断输入一段字符串,并不是要换行打印,所以应该用\r,每一次打印完又回到行的最开始,且通过循环使每一次打印的字符串长度都不断增加,这样连续起来就会形成一个简单的进度条。

在这里插入图片描述
一起来浅浅欣赏下简易的进度条小程序吧
在这里插入图片描述
进度条源代码

#include <stdio.h>
    2 #include <unistd.h>
    3 #include <string.h>
    4 #define Max 101
    5 int main()
    6 {
    7   char bar[Max];
    8   memset(bar,0,sizeof(bar));
    9   const char*lable="|/-\\";
   10   int count=0;
   11   while(count<=100)
   12   {
   13     printf("[%-100s][%d%%]%c\r",bar,count,lable[count%4]);
   14     bar[count++]='#';
   15   fflush(stdout);
E> 16   iusleep(30000);                                                                                                                                                                     
   17 }
   18   printf("\n");
   19 }

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值