我正在编写一个C++程序控制台程序下载一个大文件.我知道文件的大小,我会启动一个工作线程来下载它.我想展示一个进度指示器,让它看起来更酷.
如何在不同的时间显示不同的字符串,但是在相同的位置,在cout或printf中?
我正在编写一个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;
[> ] 0 %
[===========> ] 15 %
[======================> ] 31 %
[=================================> ] 47 %
[============================================> ] 63 %
[========================================================> ] 80 %
[===================================================================> ] 96 %
请注意,此输出是shown,每隔一行输出,但在终端仿真器中(我想也是在Windows命令行中),它将打印为on the same line.
最后,在打印更多内容之前,不要忘记打印换行符.
如果你想删除最后的条,你必须用空格覆盖它,打印一些较短的内容,比如"Done."
.
当然,同样的方法也可以在C中使用printf
;修改上述代码应该是直截了当的.