linux—进度条彩色版简单实现

一、缓冲区理解:
1.无缓冲:将所得到的信息马上显示出来。
2.行缓冲:输入输出遇到换行才执行的I/O操作,比如键盘操作。
3.全缓冲:输入输出写满缓冲区蔡执行I/O操作。比如磁盘读写。
当我们在实现的时候需要使用fflush(stdout)来刷新缓冲区,以便下一次的输出。
二、fflush的理解:
1.对于输出流,fflush()强制写入给定输出或更新的所有用户空间缓冲数据。
2.对于输入流,fflush()丢弃任何缓冲数据。
这是从底层文件中获取的,但还没有被应用程序消耗掉。流的开放状态不受影响。
三、’\r’和’\n’的区别:
回车用’\r’表示,表示是回到改行的初始位置,换行用’\n’表示,表示直接换到下一行,所以我们需要用’\r’,以此达到进度条的效果。
四、颜色设定及扩展:
1.颜色设定:

    #define NONE  "\e[0m"                                                                                           
    #define RED   "\e[0;31m"                                                                                        
    #define BLUE  "\e[0;34m"                                                                                        
    #define GREEN "\e[0;32m"    

2.扩展:

编号含义
40黑色
41深红色
42绿色
43黄色
44蓝色
45紫色
46深绿色
47白色
控制码作用
\033[0m关闭所有属性
\033[1m设置高亮度
\033[4m下划线
\033[5m闪烁
\033[7m反显
\033[8m消隐
\033[30m– \033[37m设置前景色
\033[40m– \033[47m设置背景色
\033[nA光标上移n行
\033[nB光标下移n行
\033[nC光标右移n行
\033[nD光标左移n行
\033[y;H设置光标位置
\033[2J清屏
\033[K清除从光标到行尾的内容
\033[s保存光标位置
\033[u恢复光标位置

五、sleep和usleep简单介绍:
1,sleep:以秒为单位暂停读秒;
2.usleep:以毫秒为单位暂停读秒;
六、代码实现:

#include <stdio.h>
#include <unistd.h>
#include <string.h>

#define NONE  "\e[0m"
#define RED   "\e[0;31m"
#define GREEN "\e[0;32m"
#define BLUE  "\e[0;34m"

int main()
{
    int index = 0;
    char str[21];
    memset(str,'\0',sizeof(str));
    char tmp[5] = {'-','\\','|','/','\0'};
    while(index <=20)
    {   
        str[index] = '#';
        if(index <=14)
            printf(RED"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
        elseif(index<=14)
            printf(BLUE"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
        else
            printf(GREEN"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
        fflush(stdout);
        index++;
        usleep(100000);
    }   
    printf("\n");
    return 0;
}

七、效果展示:
https://img-blog.csdn.net/20180924123120989?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0MxMDI5MzIzMjM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值