一、为什么要实现一个进度条?
首先就是简单 ( _ )
其次就是理解以下几个知识点:
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;
}