1. 程式人生 > >《C/C++實現Console下的載入進度條模擬[美觀版]》

《C/C++實現Console下的載入進度條模擬[美觀版]》

前言

  有時候我們會遇到在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; //防覆蓋
}

總結

  1. gotoxy(int x,int y);函式的使用可以極大的增強我們在控制檯輸入和輸出的靈活性;
  2. BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);函式的使用,使得控制檯樣式的多樣性得以補充。

說明

本內容首發於BiliBili!為作者本人原創!
如有轉載,請務必註明出處!
原文章地址:https:////www.cnblogs.com/seafever/p/12345200.h