为了显示这个进度条一直在工作,可以添加一个旋转光标,就是在一个特定位置实现- \ - \ 的转化,以提示客户程序运行
const char *label="-/-\\";//(转义字符的用法)
int n=strlen(label);
printf("[%c]“,label[cnt%n]);
边界问题的探讨:将进度条的指示形式变为#####>
#include"proCess.h"
#include<string.h>
#include<unistd.h>
void processbar()
{
char bar[NUM];
memset(bar,'\0',sizeof(bar));
int cnt=0;
while(cnt<=100)
{
printf("[%-100s][%d%%]\r",bar,cnt);
fflush(stdout);
bar[cnt++]=STYLE;
if(cnt<=100)
ban[cnt]='>';
usleep(100000);
}
}
这是一种覆盖的写法首先将下一个需要打印的位置放上#,并将下下个需要打印的位置放上>,这样就会在字符串的结尾保留一个>,当达到临界条件100时则防止将102位置的\0覆写掉,加一个判断语句
模拟下载
#include"proCess.h"
#include<string.h>
#include<unistd.h>
void processbar(int cnt)
{
char bar[NUM];
memset(bar,'\0',sizeof(bar));
while(cnt<=100)
{
printf("[%-100s][%d%%]\r",bar,cnt);
fflush(stdout);
bar[cnt++]=STYLE;
if(rat<100)bar[rate]='>';
}
}
void download()
{
int total=1000;
int cur=0;
while(cur<total
{
processbar(cur);
cur=cur+10;
usleep(10000);
}//模拟下载,隔一段时间显示一部分
}
通过函数指针回调展示进度(把processbar函数传进去)(通过回调显示进度)
typedef void (*press)(int);
void download(press cb)
{
int total=1000;
int cur=0;
while(cur<total
{
usleep(10000);
int rate=cur*100/tatal;
cb(rate);
cur=cur+10;
}//模拟下载,隔一段时间显示一部分
printf("\n");
}
rate表示进度,其中表示方式为cur/total算出比例再*100的数组长度