在Linux下實現彩色進度條

實現彩色進度條,實際上就是輸出一遍字符,刷新一下,再次輸出重複這樣的過程。

在這裏我們需要知道幾點:

彩色:

終端的字符顏色的控制由轉義字符實現。通過轉義序列顯示終端的顏色通常以“\033[”開頭,以m來表示轉義序列結束。但最重要的是我們在輸出完之後要用“\033[0m”來關閉所有屬性,否則之後的輸出也會變成所設置的顏色。下面只列出本次代碼所用到的轉義屬性。

\033[0m              關閉所有屬性   但輸出沒啥變化
\033[31m            設置色調爲紅色(30-37皆爲可選色調)

時間差:

這裏的睡眠時間選擇usleep(),usleep函數睡眠單位是百萬分之一秒,sleep()爲1秒

緩存區:

無緩衝:指沒有緩衝,立即顯示信息。

行緩衝:輸入輸出遇到換行符才進行IO操作。

全緩衝:輸入輸出寫滿緩衝區才進行IO操作。


1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<string.h>
  4 int main()
  5 {
  6      char bash[102];//0-100是101個,再加上'\0'總共102個
  7      const char*label="|/-\\";//"\"爲轉義字符想要輸出它必須在前面再加上一個
  8      int i=0;
  9      memset(bash,0,sizeof(bash));
10      while(i<=100)
11     {
12         printf("\033[31m[%-100s][%d%%][%c]\r",bash,i,label[i%4]);//%4是因爲總共四個字符,交替變換
13           fflush(stdout);//刷新緩存區
14           bash[i++]='I';//每次輸出後在數組最後一位賦值
15           usleep(100000);//睡0.1秒
16      }
17      printf("\n");
18      return 0;
19 }



PS:如果大家有興趣想讓進度條在遞增時發生變色,可以在while函數裏面做做文章。。





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