Linux下实现进度条和彩色进度条

一、普通进度条

#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)































猜你喜欢

转载自blog.csdn.net/qq_40840459/article/details/80229158