本文的題目就是實現一個進度條,進度條的應用在軟件中無處不在,拷貝一個文件需要一個進度條,加載一個文件也需要一個進度條,來標誌完成與否。
那麼 ,一個進度條有哪些元素呢:
一個不斷向右生長的容器(直觀的看出當前的進度)
一個數據化反映進度的百分比。
一個標誌(這個標誌反映這個進度條是否在工作,還是卡死)
在這裏有一些小小的知識點:C語言中緩衝區的刷新方式是以行緩衝刷新的。也就是說,程序要在輸入流中取到一個行結束標誌(可以是換行符和EOF)纔會顯示在輸出設備(屏幕)上。注意,程序結束時,系統會強制刷新緩衝區。
根據需要,我們可以使用一個字符數組充當進度條的容器。一開始初始化爲0,每次循環修改爲‘=’,然後打印當前的數組,因爲0是換行符‘\n’的ascall碼,所以沒次只打印到修改處。然後在回車,但是不換行('\r'),在sleep上一段時間。我們就可以看到容器的動態生長了。
下面來看具體實現:
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char str[101]={0}; 6 char arr[4]={'|','/','-','\\'}; 7 int i=0; 8 for(;i<101;++i) 9 { 10 str[i]='*'; 11 printf("[%-100s][%c][%d\%]",str,arr[i%4],i%101); 12 printf("\r"); 13 usleep(100000); 14 fflush(stdout); 15 } 16 printf("\n"); 17 return 0; 18 }
運行截圖: