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

2017-12-06 08:19:38来源:CSDN作者:t595180928人点击

分享
第七城市

在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 }

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

第七城市

微信扫一扫

第七城市微信公众平台