小言_互联网的博客

Linux 简易进度条实现及输出颜色控制

321人阅读  评论(0)

在Linux下换行和回车的区别在于\r让光标会到当前行的开始,\n让光标回到下一行的开始。进度条是在同一行输出,所以要用\r实现而进度条由0%~100%。
缓存区:无缓存,行缓存,全缓存
无缓存:指没有缓冲,直接将信息打印在显示器上,比如标准错误stderr
行缓存:输入输出遇到换行的时候才执行。
全缓存:输入输出的时候写满缓存区的时候执行I/O操作
fflush:清除读写缓存区,需要立即把输入缓存区的数据进行物理写入
fflush(stdin):刷新标准输入缓冲区,把输入缓冲区的数据清楚
flush(stdout):刷新标准输出缓冲区,把输出缓存区的数据打印到输出设备上
unsleep:单位时间微妙,挂起进程。sleep单位时间秒。

printfs输出颜色控制如下图:"\e[40;33m] \e[0m]"
40表示背景颜色,33表示输出字体颜色,\e[40;33m] \e[0m]中间为颜色控制部分


颜色:0(黑)1(红)2(绿)3(黄)4(蓝)5(洋红)6(青)7(白)
字体色:30+颜色值
背景色:40+颜色值

#include<stdio.h>                                                                  
   #include<string.h>
    #include<unistd.h>
  int main()
    {
     int i = 0;
        char bar[102];
      memset(bar,'\0',sizeof(bar));
       const char *a="|/-\\";
      for(;i<=100;i++)
          {
              bar[i] = '*';
            if(i%4 == 1)
              {
   printf("\e[40;33m[%-101s]\e[0m[%d%%][\e[34m%c\e[0m]\r",bar,i,a[i%4]);
           }
              if(i%4 == 2)
    {
     printf("\e[40;35m[%-101s]\e[0m[%d%%][\e[33m%c\e[0m]\r",bar,i,a[i%4]);
     }
     if(i%4 == 3{
      printf("\e[40;31m[%-101s]\e[0m[%d%%][\e[32m%c\e[0m]\r",bar,i,a[i%4]);
     }
     if(i%4 == 0)
     {
     printf("\e[40;37m[%-101s]\e[0m[%d%%][\e[31m%c\e[0m]\r",bar,i,a[i%4]);
     }
             fflush(stdout);
                        usleep(100000);
         }
     printf("\n");
     }


转载:https://blog.csdn.net/weixin_43218465/article/details/101865643
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场