在Linux环境下实现打印彩色进度条

在Linux环境下实现打印彩色进度条

进度条在屏幕上显示包含以下几个部分

  1. 显示已经执行了多少
  2. 执行多少占的百分比
  3. 一个转盘
    先来说一下普通的进度条
    对于显示执行多少,一般都会预留100个空间,每0.1秒完成1%
    对于执行占的百分比,用循环i来实现,每循环一次,i+1,刚好是循环占的百分比
    对于转盘,用一个数组实现,数组中有四个元素\ | - /,当这四个元素依次循环时,出现一个简单的转盘

下面先实现一个简单的进度条:

#include<stdio.h>
  2 #include<unistd.h>
  3 int main()
  4 {
  5     char buf[100] = {0};
  6     size_t i = 0;
  7     const char* label = "-/|\\";
  8     for(;i<50;i++)
  9     {
 10         buf[i] = "#";
 11         printf("[%lu%%][%c][%-50s]\r",i*2,label[i*4],buf);
 12         fflush(stdout);
 13         usleep(100000);
 14     }
 15     printf("\n");
 16     return 0;
 17 }

\n有两个作用,刷新,换行。在进度条里并不需要换行,只需要刷新,所以使用\r。

这里写图片描述

下面将实现彩色进度条打印:

先将情况做以下说明:

彩色进度条就是在普通进度条的基础上加以更改,主要就是随着进度条的前进颜色发生变化,主要问题就是配色,配色标准如下所示:
先说一下配色的规则。
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m – \033[37m 设置前景色
\033[40m – \033[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n列
\033[nD 光标左移n列
\033[y;H 设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\033也可以换成\e
文字背景色彩数字: (颜色范围:40 - 49)
40: 黑色
41: 深红色
42: 绿色
43: 黄色
44: 蓝色
45: 紫色
46: 深绿色
47: 白色
(3). 文字前景色数字: (颜色范围: 30 - 39)
30: 黑色
31: 红色
32: 绿色
33: 黄色
34: 蓝色
35: 紫色
36: 深绿色
37: 白色
如果只是单次使用,在语句的最后一定要加上\e[0m,将配色清除,变为原来的配色方案。
实现彩色进度条:

 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<string.h>
  4 int main()
  5 {
  6     int color=0;
  7     int i = 0;
  8     char str[102];
  9     memset(str, '\0', sizeof(str)/sizeof(char));
 10     char tmp[4] = {'-', '\\', '|', '/'};
 11     for(; i<=100; i++)
 12     {
 13         str[i] = '#';
 14         color=30+i%8;
 15         printf("\e[5m\e[%dm[%-101s][%d%%][%c]\e[0m",color, str, i, tmp[i%4]);
 16         printf("\r");
 17         fflush(stdout);
 18         usleep(50000);
 19     }
 20     printf("\n");
 21     return 0;
 22 }

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值