在Linux环境下写一个会变颜色的进度条程序:
Linux环境下有三种缓冲方式:1.无缓冲 2.行缓冲间 3.全缓冲 C语言中采用的是行缓冲。
\r是回车回到行首,而不会到达下一行,如果继续输出,则会造成覆盖,所以进度条选择用\r输出。
fflush(stdout)是清空缓冲,强制把结果输出到屏幕上。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
char bar[102];
const char s[] = "|/-\\";
memset(bar,0,sizeof(bar));
int rate = 0;
for(;rate < 101;rate++){
if(rate <= 20)
printf("[%d%%][%c]\033[31m[%s]\r",rate,s[rate%4],bar);
else if(rate <= 60)
printf("[%d%%][%c]\033[33m[%s]\r",rate,s[rate%4],bar);
else
printf("[%d%%][%c]\033[32m[%s]\r",rate,s[rate%4],bar);
bar[rate] = '#';
fflush(stdout);
usleep(100 * 1000);
printf ("\033[0m");
}
printf("\n");
return 0;
}