Fork me on GitHub

C++实现控制台进度条效果

在一些命令行运行的程序中,我们可能会经常看到进度条,那么这种效果如何使用C++来实现呢?
只需要根据当前进度输出相应的图像即可,这里用”▉”符号代替进度条。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<Windows.h>
using namespace std;
const int all_block_num=100;
int main(){
for(int i=0;i<all_block_num;i++){
printf("\r[%d%%]>",i*100/(all_block_num-1));
for(int j=1;j<=i*20/all_block_num;j++){
cout<<"▉";
Sleep(10);
}
}
return 0;
}

“\r”是个转义符,代表回车。
效果如下:

效果可能不是太好。
除此之外,还有一种效果,在Linux的控制台中是很常见的。
例如Linux下的wget的效果如下:

我们只需要使用C++进行=和>的组合,不断刷新输出,来实现类似的效果,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h> 
#include<Windows.h>
char x[500];
int main(){
for(int i=0;i<100;i++){
sprintf(&x[0],"%2d",i);
x[2]='%';
x[3+i]='=';
printf("\r%s>",x);
fflush(stdout);
Sleep(100);
}
return 0;
}