Linux下彩色进度条的实现

  实现一个彩色进度条的前提是要了解linux下如何改变shell的输出颜色,shell的输出颜色改变是通过转义序列完成的。

  多数转义序列以控制字符 ‘ESC’ 和左中括号 ‘[’ 开头。该起始序列称为控制序列引导符,通常由 ‘\033[’ 或 ‘\e[’ 代替
  通过转义序列设置终端显示属性时,采用以下格式:\033[属性{;属性;…}m 或 \e[属性{;属性;…}m
其中:’\033[’ 或 ‘\e’ 引导转义序列;'m’表示设置属性并结束转移序列。属性值可以有多个。看下图是属性表
在这里插入图片描述
比如我们要设置字体及背景的颜色可以这样写:
在这里插入图片描述
那么这下再来写彩色进度条就容易多了

  1 /*彩色进度条*/
  2 
  3 #include <stdio.h>
  4 #include <unistd.h>
  5 #include <string.h>
  6 #define NONE "\e[0m"    //用于恢复默认的终端输出属性,否则会影响后续的输出
  7 #define RED "\e[0;31m"
  8 #define BLUE "\e[0;34m"
  9 #define YELLOW "\e[0;33m"
 10 #define PURPLE "\e[0;35m"
 11 
 12 int main()
 13 {
 14     char buf[100] = { 0 };
 15     size_t i = 0;
 16     const char* label = "-/\\|";    //模拟转圈
 17     for(; i <= 20; ++i){
 18         buf[i] = '*';
 19         if(i <= 5)
 20             printf(RED"%s[%d%%%c]\r"NONE,buf, i*5, label[i % 4]);
 21         else if(i > 5 && i <= 10)
 22             printf(BLUE"%s[%d%%%c]\r"NONE,buf, i*5, label[i % 4]);
 23         else if(i > 10 && i <= 15)
 24             printf(YELLOW"%s[%d%%%c]\r"NONE,buf, i*5, label[i % 4]);
 25         else if(i > 15 && i <= 20)
 26             printf(PURPLE"%s[%d%%%c]\r"NONE,buf, i*5, label[i % 4]);
 27         fflush(stdout);
 28         usleep(100000);//单位是毫秒,让我们能够看到进度条的运行过程
 29         //sleep(1)单位是秒
 30     }   
 31     printf("\n");
 32     return 0;
 33 }

解释一些内容:\r 是回到行首,让进度条逼真的做法。
    \e[0m 是恢复默认的输出属性,如果不设置就会影响下一次的输出属性。
运行看下结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值