實現彩色進度條,實際上就是輸出一遍字符,刷新一下,再次輸出重複這樣的過程。
在這裏我們需要知道幾點:
彩色:
終端的字符顏色的控制由轉義字符實現。通過轉義序列顯示終端的顏色通常以“\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函數裏面做做文章。。