C语言进度条的实现
- buff[N]:进度条状态字符串,N大小决定进度条长度(自行调整),使用前先将所有字符初始化置零,我这里使用的是memset函数;
- label[]:动态标签字符数组,每次循环对4取余可得到0~3的余数,以此作为数组下标,可以实现 \ 和 / 这两字符的不断切换打印;
- for循环要保证最后一次打印的进度为100%
- printf打印中的%-39s,‘-’是左对齐的输出39个字节,后面不足的空格补齐;这里还要注意\r表示回车,但并不是换行,意思是每次刷新从本行开头重新打印。
- fflush(stdout):先将缓冲区已有的内容打印,刷新缓冲区,否则的话printf会等待usleep()结束后才打印内容。
代码实现:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void progressBar(){
/*进度条状态数组*/
char buff[40];
/*字符数组清零*/
memset(buff,'\0',40);
/*动态标签*/
char label[] = "\\/\\/";
for(int i = 0;i < 40;i++){
printf("[%-39s][%c][%.1f%%]\r",buff,label[i%4],(i+1)*2.5);
/*刷新缓冲区,先将缓冲区已有的内容打印*/
fflush(stdout);
buff[i] = '>';
/*等待0.1s(100000us)刷新进度条*/
usleep(100000);
}
putchar('\n');
}
int main(){
progressBar();
return 0;
}
Ubuntu终端测试结果: