源代码:
void prog()
{
char prog_buf[102];
memset(prog_buf,'\0',sizeof(prog_buf));
char *sign="|/-\\"; //在进度条推进的时候,光标在以顺时针旋转
int i=0;
for(i=0;i<=100;i++)
{
prog_buf[i]='=';
printf("[%-101s][%%%d][%c]\r",prog_buf,i,sign[i%4]);
//显示进度条进度,[%-101s]表示显示的时候预留101个位置,-表示输出的时候左对齐,\r表示每次循环输出的时候回到上一次输出的位置
fflush(stdout);
usleep(100000);
}
printf("\n");
}
***********************prog.c文件内容***********************
***********************main.c文件内容***********************
***********************prog.h文件内容***********************
***********************makefile文件内容***********************
***********************进度条推进***********************
为什么会用到fflush函数?
请先看下面的例子
int main()
{
printf("hello bit\n");
sleep(3);
return 0;
}
结果:先打印hello bit,再睡3秒,再返回
int main()
{
printf("hello bit");
sleep(3);
return 0;
}
结果:先睡3秒,再打印,再返回
int main()
{
printf("hello bit");
fflush(stdout); //刷新标准输出缓冲区中的内容
sleep(3);
return 0;
}
结果:先打印,再睡3秒,再返回。
原因:标准输出默认为行缓冲,以\n为尾打印,若是没有\n,则先把输出内容写入输出缓冲区。
在写进度条的时候,我们并不希望在下一次循环中换行输出,所以,输出的内容会先写到标准输出缓冲区中,所以需要用用fflush刷新标准输出缓冲区的内容输出。