Linux環境下的一個進度條小程式
阿新 • • 發佈:2018-12-21
描述:
1.進度條原理:第一次列印一個字元,例如”#”,然後使游標定位到本行首,覆蓋之前列印的字串,第二次列印”##”,覆蓋之前列印的字串,重複上述操作,直到列印100個字元。
2.fflush(stdout): fflush(stdout)重新整理標準輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出裝置上。
3.usleep 讓程式休眠,時間單位:微秒。即:每隔多長時間列印一個“#”。
4.由於Linux環境下是 命令列介面,所以無法完美的展現‘轉動狀態’,因而迴圈列印‘-’,‘/’,‘|’,‘\’......
5.顏色的變換:#define NONE "\033[m" #define RED "\033[0;32;31m"-----30%以下時為 紅色;
int main(){ //轉起來像圖形介面 char split[4] = {'-','/','|','\\'}; char buf[1024] = {0}; int i = 0; for(; i <= 100; i++){ buf[i] = '#'; if(i < 30 ){ printf("\033[0;32;31m""[%d%%][%c][%s]\r",i,split[i % 4],buf); } else if(i >=30 && i < 60){ printf("\033[1;33m""[%d%%][%c][%s]\r",i,split[i % 4],buf); } else printf("\033[0;32;32m""[%d%%][%c][%s]\r",i,split[i % 4],buf); //printf 已執行,卻沒有列印 //資料當前還在緩衝區中 fflush(stdout); //usleep 讓程式休眠,時間單位:微秒 usleep(100*1000); } return 0; }
執行效果截圖(本為動態(不換行),此處截圖)