【Linux】小程序进度条

回车换行问题

日常中的换行

在这里插入图片描述

即:
回车:回到当前行的最开始
换行:列不变,新起一行

代码中的回车换行

我们先看一段代码:
这个是带\n的
🌍结果是:
先输出 hello 彦祖
换了行5秒之后才会显示命令行

在这里插入图片描述
🌍效果:

在这里插入图片描述

🌏改变一下代码:
把\n去掉
结果是:
不换行,5秒后显示hello 彦祖+命令行

在这里插入图片描述

🌏效果:

在这里插入图片描述

那为什么会出现这种现象呢?下面我们了解一下缓冲区

在这里我们要知道,其实printf已经执行,但是数据没有被立刻刷新到显示器中,还在缓冲区中。
可以推出:
没有\n ,字符串会暂时保存起来
暂时保存的地方是:用户C语言级别的缓冲区
显示器设备的刷新策略就是行刷新\n ,即进行刷新!

倒计时函数

在这里插入图片描述
我们可以看到它是换行打印出来的。
可是我们想到的原地打印啊,那该怎么办呢?

在这里插入图片描述

怎么显示不出来呢?
\r不是光标回到首位吗?其实数据还在缓存区存着呢!
我们刷新一下缓冲区就好了

在这里插入图片描述

但这时又又又出现问题了:count>10以后个位一直不变了

在这里插入图片描述
其实解决这个问题很简单:
在这里插入图片描述

进度条

前面讲那么多,终于到进度条了。有人可能要问了,那前面那些有什么用呢?
其实进度条也是回车换行的问题,大同小异,我们一起来看看吧。

在这里插入图片描述

在这里插入图片描述
其实C语言也可以打印带颜色的字符,大家可以去百度一下。

代码:

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<string.h>
  4 
  5 #define NUM 102//要留出\0和最后小符号的位置
  6 int main()
  7 {          
  8   char arr[NUM];                                                          
  9   //初始化arr数组                                    
 10   memset(arr,'\0',sizeof(arr));
 11   const char* lab ="|/-\\";
 12   int i = 0;                                   
 13   while(i<=100)      
 14   {                    
 15     printf("[%-100s] [%d%%] [%c]\r",arr,i,lab[i%4]);
 16     //符号可以换       
 17     fflush(stdout);
 18     arr[i++]='#';                                                  
 19     usleep(100000);//0.1s,usleep单位是微秒                                                                          
 20   }                                                       
 21   printf("\n");                       
 22   return 0;                                           
 23 }
  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值