当前位置:   article > 正文

C实现一个进度条_c语言实现进度条

c语言实现进度条

平常是否做过一些小项目需要耗费一定的时间?看着别人的软件上的进度条着实有些羡慕,不放来实现一个简单的进度条吧!


首先,我们需要将【】左右中括号“固定”在屏幕的两边,然后依次用“=”将它填满,是从左向右的。

初步编写代码如下:

  1. #include <stdio.h>
  2. void ProgressBar()
  3. {
  4. char arr[102] = {'\0'};
  5. int n = 100, i = 0;
  6. while (i <= n)
  7. {
  8. arr[i] = '=';
  9. printf("[%100s]\r", arr);
  10. i++;
  11. }
  12. printf("\n");
  13. }
  14. int main()
  15. {
  16. ProgressBar();
  17. return 0;
  18. }

printf格式化字符串%s中间的100表示固定列宽,使【】两个中括号分别固定在屏幕两边。最后的 ‘\r’ 表示回车,每次打印完数组使光标回到屏幕左边,看看效果怎么样:

运行的太快了,直接全部跑出来了,我要让它慢慢走,改一下程序,让它小睡一会:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. void ProgressBar()
  4. {
  5. char arr[102] = {'\0'};
  6. int n = 100, i = 0;
  7. while (i <= n)
  8. {
  9. arr[i] = '=';
  10. printf("[%100s]\r", arr);
  11. i++;
  12. usleep(100000);
  13. }
  14. printf("\n");
  15. }
  16. int main()
  17. {
  18. ProgressBar();
  19. return 0;
  20. }
再来看效果:

这次到时变慢了,但是每次走的是一大段,而不是一个‘=’,这是输出缓冲区的数据没有即使刷新到显示器导致的,每次printf后fflush刷新一下输出缓冲区即可,另外有点诡异的是等号居然是从1用边往左边长的,这不是我想要的结果,仔细分析一下原因,就知道了这是 右对齐 在作怪,把它变成左对齐就好了:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. void ProgressBar()
  4. {
  5. char arr[102] = {'\0'};
  6. int n = 100, i = 0;
  7. while (i <= n)
  8. {
  9. arr[i] = '=';
  10. printf("[%-100s]\r", arr);
  11. fflush(stdout);
  12. i++;
  13. usleep(100000);
  14. }
  15. printf("\n");
  16. }
  17. int main()
  18. {
  19. ProgressBar();
  20. return 0;
  21. }
效果如下:

现在是从左往右增长了,而且每次长一个等号。只是现在空有一个进度条有点尴尬,看看别人的进度条都有百分比,加上:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. void ProgressBar()
  4. {
  5. char arr[102] = {'\0'};
  6. int n = 100, i = 0;
  7. while (i <= n)
  8. {
  9. arr[i] = '=';
  10. printf("[%-100s][%d%%]\r", arr, i);
  11. fflush(stdout);
  12. i++;
  13. usleep(100000);
  14. }
  15. printf("\n");
  16. }
  17. int main()
  18. {
  19. ProgressBar();
  20. return 0;
  21. }
看看效果如何:

还欠缺点什么。。哦,对比一下别人的实现,有时候进度条会有停止不前的时候,这个时候我们很难知道程序是在继续运行还是已经卡死了,不免让人捉急,所以弄个图标来提示一下。

我们用 | / - \  这几个符号依次出现来达到一种动态旋转的效果,代码如下:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. void ProgressBar()
  4. {
  5. char arr[102] = {'\0'};
  6. char *imag = "|/-\\";
  7. int n = 100, i = 0;
  8. while (i <= n)
  9. {
  10. arr[i] = '=';
  11. printf("[%-100s][%d%%][%c]\r", arr, i, imag[i % 4]);
  12. fflush(stdout);
  13. i++;
  14. usleep(100000);
  15. }
  16. printf("\n");
  17. }
  18. int main()
  19. {
  20. ProgressBar();
  21. return 0;
  22. }
再看看效果:

我的显示器上已经显示出了右边有一个动态旋转的小图标了!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/264209
推荐阅读
相关标签
  

闽ICP备14008679号