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 对象; 只是为了输出方便
最后让我们实现一下简单进度条的代码
- #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;
- }
参考转载自: https://www.cnblogs.com/cuckoo-/p/10741562.html#top
来源: http://www.bubuko.com/infodetail-3275618.html