《C/C++實現Console下的載入進度條模擬[美觀版]》
阿新 • • 發佈:2020-02-22
前言
有時候我們會遇到在CMD或DOS控制檯上出現的載入進度條,雖然不是如網頁和軟體寫的美觀。但確確實實也有著自己的特色。而且,一個好看的載入進度條也能增加使用者使用控制檯程式的體驗!所以,拿來研究一下也未嘗不可!
博主,一開始寫了個載入進度條的模擬。但是,效果不是很理想!於是,我默默地掏出了度娘....
What are you 搞啥勒?網上的答案几乎千篇一律,哎~有時候還能看見兩篇一模一樣的文章作者居然同時標註原創!而且,模擬的效果也不咋滴!
沒辦法,自己動手豐衣足食!還是得我自己來!
第一次嘗試
這是博主第一次寫的進度條,怎麼講呢!兩個方塊之間的空隙讓人看了是真的不爽!
之前見那些控制檯應用程式的載入進度條也不是這樣的啊!為什麼他們寫的挺好看的?
中間這個方塊怎麼解決?
莫非不是某個字元輸出的?這時,我不經意間發現了這個....
好像被選中的兩個字元中間是連續的啊!難道那些應用就是通過選中了那塊內容覆蓋弄出的嗎?好像不對!一來,這樣實現似乎比較困難;二來,每次...總之還是比較困難o(////▽////)o....
不過....
第二次嘗試
成了!!!真的可以,如果我們通過改變每個單位位寬的字型顏色和背景顏色一致,那不就實現連續的樣式了嗎?
所以,上程式碼!
#include <iostream> #include <stdio.h> #include <windows.h> void gotoxy(int x, int y); int main() { char a[4] = {'|','/','-','\\'}; //儲存相關的字元 int i, j, x=2, y=1; //宣告變數 std::cout << "*******載入進度條模擬*******" << std::endl; //輸出頂框 putchar('\n'); //為接下來的進度條保留空位 std::cout << "******點贊***+***關注******" << std::endl; //輸出底框 gotoxy(x,y); //呼叫函式控制游標位置 for (i = 0;i <= 100;i++) { //進度條總進度控制 std::cout << " ["; //進度條左邊框 for (j = 0;j < i/10;j++) { //控制載入進度的顯示 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); //設定載入條樣式配置 std::cout << "_"; } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); //恢復原配置 for (j = 0;j < (10-(i/10));j++) { printf("%c", '.'); } //未載入進度顯示 std::cout << "] "; //進度條右邊框 std::cout << a[i%4] << "正在載入中"; //顯示和程式進行中提示和“正在載入”字樣提示 for (j = 0;j < (i%4);j++) { std::cout << "."; } //實現動態顯示 for (j = 0;j < (4-i%4);j++) { printf("%c", ' '); } Sleep(100); //控制程式執行速度 putchar('\r'); //回車 } std::cout << "( ゜- ゜)つロBiliBili乾杯~\n" << std::endl; //防覆蓋 }
總結
- gotoxy(int x,int y);函式的使用可以極大的增強我們在控制檯輸入和輸出的靈活性;
- BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);函式的使用,使得控制檯樣式的多樣性得以補充。
說明
本內容首發於BiliBili!為作者本人原創!
如有轉載,請務必註明出處!
原文章地址:https:////www.cnblogs.com/seafever/p/12345200.h