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 是恢复默认的输出属性,如果不设置就会影响下一次的输出属性。
运行看下结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Code_beeps/article/details/89371482