【进度条】小程序的实现

♥在实现进度条小程序之前我们需要交代一些知识点

首先先说个小知识点:
\n\r一样吗?
\n其实是换行:就是光标跑到当前位置的下一行。
\r其实是回车(不换行):就是光标跑到当前行的开始。
但是一般我们键盘上的回车就是换行加回车。

缓冲区的概念

【进度条】小程序的实现_第1张图片【进度条】小程序的实现_第2张图片
为什么hello world没有立即打印出来?难道是sleep先于printf执行吗?
解答:
显然不是,这是因为缓冲区的存在,printf已经执行了,但是数据没有立即被刷新到显示器上,字符串被暂时保存起来了,保存的地方就叫缓冲区。
【进度条】小程序的实现_第3张图片
【进度条】小程序的实现_第4张图片

这次一下就打印出来了,因为我们在最后加了\n
那为什么?
因为显示器刷新策略就是行刷新,\n换行了所以就刷新了。
还可以用fflush(stdout)进行刷新。

C程序默认会打开三个输入输出流
分别是:
stdin键盘
stdout显示器
stderr显示器
FILEstdin
FILE
stdout
FILE*stderr

为啥要打开这几个流呢?
因为我们写程序得写入数据,计算结果得输出结果到显示器,有错误还得报错。

下面我们先写一个

倒计时

#include
#include
int main()
{
  int count=10:;
  while(count)
  {
  printf("%2d\r",count);
  fflush(stdout);
  --count;
  sleep(1);
  }

  return 0;
}

【进度条】小程序的实现_第5张图片

现在我们来实现

进度条

#include
#include
#include

#define num 100
int main()
{
  char bar[num+1];
  memset(bar,'\0',sizeof(bar));
  const char*lable="|/-\\";
  int i=0;
  while(i<=100)
  {
    printf("[%-100s][%3d%%][%c]\r",bar,i,lable[i%4]);
    fflush(stdout);
    bar[i]='#';
    ++i;
    usleep(60000);
  }

  printf("\n");
  return 0;
}

效果图:
在这里插入图片描述这样进度条小程序就实现啦,是不是很简单!


⭐感谢阅读,我们下期再见
如有错 欢迎提出一起交流

你可能感兴趣的:(Linux,C++,C语言,小程序)