c++ - 如何在纯 C/C++ (cout/printf) 中显示进度指示器?

标签 c++ c user-interface c++11 io

我正在用 C++ 编写一个控制台程序来下载一个大文件。我知道文件大小,我启动了一个工作线程来下载它。我想显示一个进度指示器,让它看起来更酷。

如何在 cout 或 printf 中,在不同的时间,但在相同的位置显示不同的字符串?

最佳答案

使用固定宽度的输出,使用如下内容:

float progress = 0.0;
while (progress < 1.0) {
    int barWidth = 70;

    std::cout << "[";
    int pos = barWidth * progress;
    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.16; // for demonstration only
}
std::cout << std::endl;

http://ideone.com/Yg8NKj

[>                                                                     ] 0 %
[===========>                                                          ] 15 %
[======================>                                               ] 31 %
[=================================>                                    ] 47 %
[============================================>                         ] 63 %
[========================================================>             ] 80 %
[===================================================================>  ] 96 %

请注意,此输出显示在彼此下方一行,但在终端仿真器中(我认为也在 Windows 命令行中)它会在同​​一行上打印.

最后,不要忘记在打印更多内容之前打印一个换行符。

如果你想删除最后的栏,你必须用空格覆盖它,以打印更短的内容,例如 "Done."

同样,当然也可以在 C 中使用 printf 来完成;修改上面的代码应该是直截了当的。

关于c++ - 如何在纯 C/C++ (cout/printf) 中显示进度指示器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539867/

相关文章:

java - 如何使用Java绘制不完整的多边形

c++ - QWizard 和每个 QWizardPage 的表单

c++ - 无法获得 Boost Spirit 语法以使用 std::map<> 的已知键

c++ - 将 TCP 服务器转换为 UDP 服务器

java - 使用 Java SE 的桌面应用程序中 GUI 的最佳工具或解决方案

python - 如何访问 tkinter 中不同类的变量?

c++ - 跟踪器示例中的 OpenCV 3.0 链接器错误

C - 字符转 ASCII : 'a' prints as 6

c - 结构不保持 self 类型的原因?

c++ - aes加密实现