准备:
在这之前需要知道换行和回车的区别,即\r和\n。在linux中 \r 让光标回到当前行的开始,\n让光标从下一行开始。还需要知道linux中 缓冲区写满后才会输出。
实现彩色进度条,必然要清楚色彩的变化:
printf("\033[3%im[%-100s][%d%%][%c]\033[0m\r",i%8,bar,i,lable[i%4]);
\033[33m变色内容\033[0m
第一个\033 是格式化处理
最后的\033是以前设置的格式都清除掉
3%是颜色;0-7 0是黑色7是白色;以4开头的是背景颜色
思路:
我们通过一个数组,每加载成功一次,数组会多出现一个标示。由于进度条是在一行内进行的,故我们需要回车,不需要换行,通过“\r”实现。
进度条由0%~100%,在字符数组中,输出一串字符时,最后以“\0”结束的,故需要一个大小为102的数组,加载成功的数据用“#”表示。
进度条会出现一个区间,然后在里面进行加载,故先用“【”和“】”表示加载的区间。
定义一个rate标识进度,每进行一次加一,直到100时停止。
在进行回车前,需要进行刷新。
在加载进度时,通过sleep()或usleep()控制睡眠时间,sleep表示秒,usleep表示微秒。
对于加载中旋转的小圈通过“-|/”进行。
效果:
printf("\033[3%im[%-100s][%d%%][%c]\033[0m\r",i%8,bar,i,lable[i%4]);//4代表背景颜色
printf("\033[3%im[%-100s][%d%%][%c]\033[0m\r",i%8,bar,i,lable[i%3]);//3代表内容颜色
代码:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
void ColorProBar()
{
int i=0;//记录百分比
char bar[101]; //存储0-100个‘#’
memset(bar,0,sizeof(bar));
const char *lable="|/-\\";//存储标志正在工作 假装在“旋转“
while(i<=100)
{
printf("\033[3%im[%-100s][%d%%][%c]\033[0m\r",i%8,bar,i,lable[i%4]);
fflush(stdout);
bar[i++]='#';
usleep(100000);
}
printf("\n");
}
int main()
{
ColorProBar();
return 0;
}