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

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章