普通进度条的实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char buf[101] = "#";
char *sign = "|/-\\";//旋转条
int i;
for(i=0;i<=100;i++)
{
buf[i]='#';
printf("[%-100s][%d%%][%c]\r",buf,i,sign[i%4]);//左对齐输出并留足100个位置
fflush(stdout);//每次输出完刷新缓冲区,为下次输出做好准备
usleep(100000);//每次输出完后使该线程挂起100000微妙,即0.1秒
}
return 0;
}
效果图:
注意:
- \n 表示换到下一行,而 \r 表示换到该行起始位置,用后者可以达到效果
- 以上只能实现一个普通的黑白进度条,那么如何实现一个彩色进度条呢
终端的字符颜色由转义序列控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符’ESC’开头。多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符,通常由’\033[‘或’\e[‘代替。
通过转义序列设置终端显示属性时,可采用以下格式:
\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
其中,’\033[‘或’\e[‘引导转义序列;’m’表示设置属性并结束转义序列。Param为属性值,{…}表示可选(多个参数之间用分号隔开,与顺序无关)。
printf(“\e[字背景颜色;字体颜色m 字符串 \e[0m”);
字背景颜色的范围:40~49 字颜色范围:30~39
注意:’\033[0m’用于恢复默认的终端输出属性,否则会影响后续的输出。
修改之后的代码如下:
效果图: