问题:
在现实生活中我们可以经常看到一些应用进度条的场景。比如说在游戏中的进度展示,在工作中下载东西,解压缩等查看进度都会有进度条忙碌的身影,下面我们在linux下实现一个进度条,要求:(1)进度容器的展示;[# ]
(2)进度展示的精确值;[100%]
(3)工作是否进行的提示标志;[-]
思路:
(1)背景知识:在c语言中的缓冲方式是以行缓冲形式进行,即输入流在一行中遇到行结束标志符(EOF或换行符‘\n’)时才刷新缓冲,这里我们用古老的打字机原理进行回车刷新,而不换行:printf(“\r“);即可看到动态增长
(2)细节实现:
定义一个可以装100个进度符号的数组做容器,另外多加一个'\0'的空间,一共101个位置并初始化;
初始化的作用一是防止乱码的出现,二是因为0是换行符‘\n’的ascall码,所以每次只打印到修改处,然后回车('\r')不换行,在sleep上之后强行刷新该行;
fflush(stdout)是清空stdout的缓冲区了;
效果:
实现代码:
<span style="font-size:24px;">#include "process.h"
void process()
{
int i=0;
char buf[101];
memset(buf,'\0',sizeof(buf));
char index[4]={'-','|','/','\\'};
for(i=0; i<100;++i)
{
buf[i]='#';
printf("[%-100s][%d%%][%c]",buf,i+1,index[i%4]);
printf("\r");
usleep(100000);
fflush(stdout);
}
printf("\n");
return;
}
</span>