简单进度条的实现
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main()
{
int k=0;
char bar[102];
memset(bar,0,sizeof(bar));
const char* str="|-/\\";
for(;k<=100;++k)
{
printf("[%-100s] (%d%%) [%c]\r",bar,k,str[k%4
]);
fflush(stdout);
bar[k]='*';
sleep(1);
}
printf("\n");
return 0;
}
注解:
1.[%-100s]:表示每次从左边开始打印100个字符,长度不够的时候用空格补齐;
如果是[%+100s]:表示每次从右边开始打印100个字符,长度不够的时候用空格补齐。
2.’\r’:表示每次打印的时候光标在同一行的开头;
‘\n’:每次打印将光标放在下一行,并不一定是开头;
‘\r\n’:每次打印将光标放在下一行的开头。
3.使用fflush函数将每次打印的数据刷新到标准输出,方便观察使用sleep函数进行等待。
彩色进度条的实现
终端的字符颜色由转义序列控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符’ESC’开头。多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符,由’\033[‘或’\e[‘代替。
代码实现:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main()
{
int k=0;
int j=0;
int color[]={4,3,2,5,6};
char bar[102];
memset(bar,0,sizeof(bar));
const char* str="|/-\\";
for(;k<=100;++k)
{
printf("\033[3%dm[%-100s]\033[0m\033[33m[%d%%]\033[0m[%c]\r",
color[j], bar, k, str[k % 4]);
fflush(stdout);
bar[k]='*';
//每20%变色一次
if(k%20==0)
{
++j;
}
usleep(7000);
}
printf("\n");
return 0;
}