当前位置:   article > 正文

Linux下用c语言实现可视化进度条_linux上c语言可视化编辑器

linux上c语言可视化编辑器

在我们使用printf的时候,我们的数据是先放在缓冲区,然后我们用printf从中拿取,我们可以巧用‘\r’和对缓冲区进行刷新,然后再进行usleep来调整进度条完成的时间,不断打印,来实现动画的效果。

C语言会默认打开三个流,

  • 输入流stdin
  • 输出流stdout
  • 错误信息流stderr

在linux下,C语言以换行‘\n’为标志刷新缓冲区的数据,也就是我们如果没有‘\n’,我们的信息是先放在缓冲区,然后等代码执行完之后刷新缓冲区的数据,我们才在显示屏上看到打印出来的数据,而我们用fflush可以立即刷新缓冲区。

usleep可以让我们看到程序的进行,否则程序运行的速度太快,就看不到动画的效果。

版本一

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<unistd.h>
  5. void processbar()
  6. {
  7. char ch[102];
  8. memset(ch,'\0',sizeof(ch));
  9. int cur = 0;
  10. while(cur <= 100)
  11. {
  12. usleep(50000);
  13. printf("%s\r",ch);
  14. fflush(stdout);
  15. ch[cur++] = '-';
  16. if(cur < 100) ch[cur] = '>';
  17. }
  18. printf("\n");
  19. }
  20. int main()
  21. {
  22. processbar();
  23. return 0;
  24. }

版本二(调用进度条):

  1. #define RED "\033[0;32;31m"
  2. #define NONE "\033[m"
  3. #define NUM 100
  4. #define SYMBOL '-'
  5. #define LIGHT_PURPLE "\033[1;35m"
  6. #include<stdio.h>
  7. #include<unistd.h>
  8. #include<string.h>
  9. #include<stdlib.h>
  10. typedef void (*callback_t)(int);
  11. extern void processbar(int speed);
  12. const char* cur = "|/-\\";
  13. char ch[NUM] = {0};
  14. void processbar(int speed)
  15. {
  16. if(speed > 100 || speed < 0) return;
  17. int len = strlen(cur);
  18. printf(RED"[%-100s]"NONE"[%d%%],[%c]\r",ch,speed,cur[speed%len]);
  19. fflush(stdout);
  20. ch[speed++] = SYMBOL;
  21. if(speed < 100) ch[speed] = '>';
  22. }
  23. void download(callback_t cb)
  24. {
  25. int total = 10000;
  26. int curr = 0;
  27. while(curr <= total)
  28. {
  29. usleep(5000);
  30. int rate = curr*100/total;
  31. cb(rate);
  32. curr += 10;
  33. }
  34. printf("\n");
  35. }
  36. int main()
  37. {
  38. printf(LIGHT_PURPLE"download1:\n"NONE);
  39. download(processbar);
  40. return 0;
  41. }

 

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

闽ICP备14008679号