详解在Linux下实现(彩色)进度条程序,并通过makefile进行编译.

本文介绍了如何使用C语言创建一个简单的进度条,并通过控制字符和颜色代码实现彩色打印。文章详细讲解了' '与' '的区别,usleep函数的作用以及fflush()函数在清除缓冲区中的应用。示例代码展示了如何利用这些知识动态更新进度条并展示四种颜色的循环变化。
摘要由CSDN通过智能技术生成

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

首先就是简单 ( _ )

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

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对象;只是为了输出方便

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

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

int main(){

  char bar[101];
  int i = 0;
  const char* p = "-/|\\";

  memset(bar, 0, sizeof(bar));

  while(i <= 100){

    printf("[%-100s][%d%%][%c]\r",bar, i, *(p + (i % 4)));
    fflush(stdout);
    bar[i++] = '#';
    usleep(100000);
  }

  printf("\n");

  return 0;
}

二、如何实现彩色打印

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值