Linux下实现进度条并且彩色打印

Linux下实现进度条并彩色打印

一、为什么要实现一个进度条?

  首先就是简单 ( ^_^ )

  其次就是理解以下几个知识点:

    1. ‘ \r ‘ 与 ‘  \n ‘ 的区别

      先来看下什么是缓冲区:暂时存放输入输出信息的地方

      \r:将要输入输出的信息会覆盖缓冲区原有的信息

      \n:先进行输入输出信息,再换行,最后刷新缓冲区

    2. usleep函数

      作用:把调用该函数的线程挂起一段时间,单位是微秒

      头文件:#include <unistd.h>

      语法:void usleep( int micro_seconds );

      注意:这个语法不能工作在windows系统下,可以用在Linux测试环境下

    3.fflush()

      fflush():会强迫将缓冲区中的数据写入回参stream指定的文件中

      作用:清楚读写缓冲区中的内容

      原型:int flush(FILE* stream)

      了解:stdout-->C语言头文件中的一个宏,它展开到一个FILE*类型的表达式,表达式指向一个与标准输出流相关联的FILE对象;只是为了输出方便

  最后让我们实现一下简单进度条的代码

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <string.h>
 4
 5 int main(){
 6
 7   char bar[101];
 8   int i = 0;
 9   const char* p = "-/|\\";
10
11   memset(bar, 0, sizeof(bar));
12
13   while(i <= 100){
14
15     printf("[%-100s][%d%%][%c]\r",bar, i, *(p + (i % 4)));
16     fflush(stdout);
17     bar[i++] = ‘#‘;
18     usleep(100000);
19   }
20
21   printf("\n");
22
23   return 0;
24 }

二、如何实现彩色打印

  Linux下使printf()函数显示不同颜色

    颜色:
    #define NONE "\033[0m" 
    #define RED "\033[0;32;31m"
    #define LIGHT_RED "\033[1;31m"
    #define GREEN "\033[0;32;32m"
    #define LIGHT_GREEN "\033[1;32m"
    #define BLUE "\033[0;32;34m"
    #define LIGHT_BLUE "\033[1;34m"
    #define DARY_GRAY "\033[1;30m"
    #define CYAN "\033[0;36m"
    #define LIGHT_CYAN "\033[1;36m"
    #define PURPLE "\033[0;35m"
    #define LIGHT_PURPLE "\033[1;35m"
    #define BROWN "\033[0;33m"
    #define YELLOW "\033[1;33m"
    #define LIGHT_GRAY "\033[0;37m"
    #define WHITE "\033[1;37m"

  彩色进度条源代码

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

#define RED "\033[0;32;31m""]"
#define NONE "\033[0m""]"
#define GREEN "\033[0;32;32m""]"
#define BLUE "\033[0;32;34m""]"
#define YELLOW "\033[1;33m""]"

int main(){
  char bar[101];
  int i = 0;
  const char* p = "-/|\\";
  memset(bar, 0, sizeof(bar));
  while(i <= 100){
    if(i % 4 == 0){
      printf(YELLOW);
    }else if(i % 4 == 1){
      printf(GREEN);
    }else if(i % 4 == 2){
      printf(BLUE);
    }else{
      printf(RED);
    }
    printf("[%-100s][%d%%][%c]\r",bar, i, *(p + (i % 4)));
    fflush(stdout);
    bar[i++] = ‘#‘;
    usleep(100000);
  }
  printf(NONE);
  printf("\n");

  return 0;
}

  参考转载自:https://www.cnblogs.com/cuckoo-/p/10741562.html#top

原文地址:https://www.cnblogs.com/bj3251101/p/11808950.html

时间: 2024-07-30 13:52:23

Linux下实现进度条并且彩色打印的相关文章

通过实现Linux下的进度条引发的一系列问题

Linux下实现进度条 代码如下:  1 #include<stdio.h>   2 #include<unistd.h>   3 void Progess()   4 {   5         char arr[101];   6         memset(arr,'\0',sizeof(arr)/sizeof(char));   7         char state[5]="|/-|\0";   8         int i=0;   9    

Linux下简易进度条的实现

在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[=                                               ]表示进度是1%,刷新之后 再输出:[==                                             ]......由于刷新的很快,所以看起来像是等号不断向后增加,直到进度完成. 在写这个程序之前我们需要了解一下的知识: 1.缓冲区 缓冲区分

Linux下的进度条小程序

本文的题目就是实现一个进度条,进度条的应用在软件中无处不在,拷贝一个文件需要一个进度条,加载一个文件也需要一个进度条,来标志完成与否. 那么 ,一个进度条有哪些元素呢: 一个不断向右生长的容器(直观的看出当前的进度) 一个数据化反映进度的百分比. 一个标志(这个标志反映这个进度条是否在工作,还是卡死) 在这里有一些小小的知识点:C语言中缓冲区的刷新方式是以行缓冲刷新的.也就是说,程序要在输入流中取到一个行结束标志(可以是换行符和EOF)才会显示在输出设备(屏幕)上.注意,程序结束时,系统会强制刷

shell下的进度条和最大最小平均值

进度条 C语言下的进度条参考我原来的一篇blog->进度条 function proc() {      i=0       str=''      arr=('|' '/' '-' '\\')      index=0      while [ $i -le 100 ]      do          printf "[%-101s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}"

C# 模式窗口下更新进度条

public partial class frmProcessBar : Form { public frmProcessBar() { InitializeComponent(); } public bool Increase(int nValue) { if (nValue > 0) { if (progressBar1.Value + nValue < progressBar1.Maximum) { progressBar1.Value += nValue; return true; }

Linux学习之进度条设计progressBar

进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示. #include<stdio.h> #include<stdlib.h> void progressBar() { char buffer[21]={0}; int count=0; int i=5; while(count!=20) { i=5; while(i--) buffer[count++]='#'; printf("%-

linux 下的50条命令

文件和目录的基本操作 1   mkdir命令: 创建目录 1.1   mkdir -p \data\jxm\    -p 创建递归目录 2   touch命令:创建文件 2.1  touch 1.txt  表示创建文件. 3   cp:拷贝命令      3.1   cp -r /data/jxm/ ./ -r 连同目录一起拷贝 4   mv: 移动文件     4.1   mv/data/test.txt /home/  将test文件移动到/home/下 4.2   mv test.txt

linux脚本显示进度条

环境Centos 6.6 [[email protected] ~]# cat jindutiao.sh  #!/bin/sh b='' for ((i=0;$i<=100;i+=2)) do         printf "progress:[%-50s]%d%%\r" $b $i         sleep 0.1         b=#$b done echo [[email protected] ~]# 效果图:

黑窗口下带进度条的http下载

package main import ( "flag" "fmt" "io" "log" "net/http" "os" "strconv" "strings" "time" "github.com/cheggaaa/pb" ) var ( url = flag.String("url"