在写进度条小程序之前,要了解下面几点知识:
1.首先要了解回车和换行:
换行和回车不是一个概念!
简单来说,换行是光标移动到下一行,而回车(\r)是把光标移动但当前行的最开始(行首)。
2.还需要了解缓冲区:
缓冲区分为:无缓冲、行缓冲、全缓冲。
无缓冲:是指没有缓冲,可以将信息立马显现出来。
行缓冲:是输入输出遇到换行才执行的操作。
全缓冲:是输入输出写满缓冲区才执行I/O操作。
3.了解fflush函数:
fflush函数,作用清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。
fflush(stdin)作用是刷新标准输入缓冲区,把输入缓冲区里的东西清空。
fflush(stdout)作用是刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
了解之后,就可以开始写代码,如下:
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
{
int i=0;
char arr[102];
memset(arr,0,sizeof(arr));
const char*ptr="|/-\\";
for(;i<=100;i++)
{
printf("[%-100s][%d%%][%c]\r",arr,i,ptr[i%4]);//取模运算为防止越界
//%-100s 预留100个字节的空间,左对齐 %%输出%
fflush(stdout);//刷新输出缓冲区
arr[i]='#';
usleep(10000);//把程序挂起一段时间,单位微秒
}
printf("\n");
return 0;
}