实现彩色进度条,实际上就是输出一遍字符,刷新一下,再次输出重复这样的过程。
在这里我们需要知道几点:
彩色:
终端的字符颜色的控制由转义字符实现。通过转义序列显示终端的颜色通常以“\033[”开头,以m来表示转义序列结束。但最重要的是我们在输出完之后要用“\033[0m”来关闭所有属性,否则之后的输出也会变成所设置的颜色。下面只列出本次代码所用到的转义属性。
\033[0m 关闭所有属性 但输出没啥变化
\033[31m 设置色调为红色(30-37皆为可选色调)
时间差:
这里的睡眠时间选择usleep(),usleep函数睡眠单位是百万分之一秒,sleep()为1秒
缓存区:
无缓冲:指没有缓冲,立即显示信息。
行缓冲:输入输出遇到换行符才进行IO操作。
全缓冲:输入输出写满缓冲区才进行IO操作。
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4 int main()
5 {
6 char bash[102];//0-100是101个,再加上'\0'总共102个
7 const char*label="|/-\\";//"\"为转义字符想要输出它必须在前面再加上一个
8 int i=0;
9 memset(bash,0,sizeof(bash));
10 while(i<=100)
11 {
12 printf("\033[31m[%-100s][%d%%][%c]\r",bash,i,label[i%4]);//%4是因为总共四个字符,交替变换
13 fflush(stdout);//刷新缓存区
14 bash[i++]='I';//每次输出后在数组最后一位赋值
15 usleep(100000);//睡0.1秒
16 }
17 printf("\n");
18 return 0;
19 }
PS:如果大家有兴趣想让进度条在递增时发生变色,可以在while函数里面做做文章。。