如何在控制檯寫一個簡單的進度條
阿新 • • 發佈:2019-01-24
昨天在ubuntu下給同學拷貝電影,又遇到了那個蛋疼的問題,切換到別的介面的時候那個進度條的視窗就沒有了,總也不知道拷貝的進度。
於是想寫一個進度條,如何在程式中寫一個簡單的進度條呢?
Window下的簡單實現:
#include<stdio.h> #include<string.h> #include <windows.h> #define str_len 100 int linepos=0; const int dotnum=str_len; char str[str_len+1]; void draw() { memset(str,'*',linepos); str[linepos]='|'; str[linepos+1]='|'; memset(str+linepos+2,'*',str_len-linepos-1); //可以每次只改變兩個字元來完成字串的更新,此處略了 system("cls"); //清理螢幕 puts(str); fflush(stdout); linepos=(linepos+1)%str_len; } int main() { while(1) { draw(); Sleep(100); } return 0; }
這裡有個問題,用的system("cls");來清屏,可能會清除別的字元。更多windows console的函式,見Win console
linux下的實現就比較簡單了:
#include<stdio.h> #include<string.h> #define str_len 100 int linepos=0; const int dotnum=str_len; char str[str_len+1]; void draw() { memset(str,'*',linepos); //可以每次只改變兩個字元來完成字串的更新,此處略了 str[linepos]='|'; str[linepos+1]='|'; memset(str+linepos+2,'*',str_len-linepos-1); putchar('\r'); //輸出字元'\r',回到當前行的起始位置 //這個'\r'在linux下的意義是回到當前行的起始位置,但是在windows下跟'\n'是相同的, puts(str); fflush(stdout); linepos=(linepos+1)%str_len; } int main() { while(1) { draw(); usleep(100); } return 0; }
把這段兒程式碼在程式中運用,做一個詳細點兒的進度條,可以獲得好點兒的互動體驗。(誰說terminal console就不需要互動體驗呢?)