Как сделать панель загрузки в консоли c ++ - PullRequest
0 голосов
/ 11 октября 2018

как я могу сделать функцию, которая показывает прогресс в виде полосы загрузки?что-то похожее на это [----------->]

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Код ниже, адаптированный из этого вопроса .Обратите внимание, что я добавил Windows.h, чтобы использовать функцию Sleep.Это просто для того, чтобы показать, как это работает.Вы можете просто удалить его или изменить на рабочую альтернативу * nix.Функция работает асинхронно, поэтому вы можете выполнять другие действия, пока индикатор выполнения еще не загружен полностью.

#include <iostream>
#include <future>
#include <thread>
#include <Windows.h>

void load() {
    float progress = 0.0;

    while (progress < 1.0) {

        int barWidth = 70;
        int pos = barWidth * progress;

        Sleep(100);

        std::cout << "[";
        for (int i = 0; i < barWidth; i++) {
            if (i < pos) std::cout << "=";
            else if (i == pos) std::cout << ">";
            else std::cout << " ";
        }
        std::cout << "]" << int(progress * 100.0) << " %\r";
        std::cout.flush();

        progress += 0.01;
    }
    std::cout << std::endl;
}

int main() {
    std::future<void> startLoading = std::async(std::launch::async, load);
    // Do something while loading...
    for (int i = 0; i < 100; i++) {
        std::cout << i << " ";
    }
    return 0;
}
0 голосов
/ 11 октября 2018

попробуйте что-то вроде этого.

void draw_bar(float numerator, float denominator, float size)
{
    float current_position = (float)(numerator / denominator) * (float)size;
    cout << "[";
    for (int i = 0; i < current_position; i++)
        i != current_position - 1 ? cout << '-' : cout << '>';
    for (int i = 0; i < size - current_position; i++)
        cout << " ";
    cout << "]";
    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...