一、普通进度条
#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)