一、普通进度条
#include <stdio.h>
#include <unistd.h>
int main()
{
char buf[101] = {};
int i =0;
char *ptr = "|/-\\";
for(i = 0; i < 100 ; i++)
{
buf[i] = '#';
printf("[%-100s][%d%%][%c]\r", buf, i+1, ptr[i%4]);
fflush(stdout);
usleep(100000);
}
printf("\n");
return 0;
}
二、炫彩进度条
通过转义序列设置终端显示属性时,可采用以下格式:
\033[Param{;Param;...}m 或 \e[Param{;Param;...}m
其中,\033[或\e[为引导转义序列,
Param为属性项,{ }表示可选,多个选项间用分号间隔。
m表示设置属性并结束转义序列
常见的属性项为(具体可根据:man console_codes命令查询):
显示序列:
\033[0m 关闭转义序列
\033[1m 粗体或高亮
\033[5m 闪烁
前景颜色序列:
\033[30m 黑
\033[31m 红
\033[32m 绿
\033[33m 黄
\033[34m 蓝
\033[35m 洋红
\033[36m 青
\033[37m 白
背景颜色序列:
与前景颜色对对应,前景色是30+,背景色是40+
为实现不同颜色的替换,将这些颜色序列定义为宏,所以,整体代码如下:
#include<stdio.h>
#include<unistd.h>
#define END "\033[0m"
#define BLACK "\033[30m"
#define RED "\033[31m"
#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define BULE "\033[34m"
#define PORPLE "\033[35m"
#define DGREEN "\033[36m"
#define WHITE "\033[37m"
int main()
{
char buf[102]="#";
int i=0;
char str[]="|/-\\";
int c = 0;
for(i=1;i<=100;i++)
{
buf[i]='#';
c = i%8;
switch(c)
{
case 0:
printf(BLACK);
break;
case 1:
printf(RED);
break;
case 2:
printf(GREEN);
break;
case 3:
printf(YELLOW);
break;
case 4:
printf(BULE);
break;
case 5:
printf(PORPLE);
break;
case 6:
printf(DGREEN);
break;
case 7:
printf(WHITE);
break;
}
printf("[%-100s][%d%%][%c]\r",buf,i,str[i%4]);
printf(END);
fflush(stdout);
usleep(100000);
}
printf("\n");
return 0;
}
下面是Makefile:
processbar:processbar.o
gcc $^ -o $@
%o: %.c
gcc -c $^ -o $@
all=processbar.i\
processbar.s\
processbar.o\
processbar
.PHONY: clean
clean:
rm -f $(all)