当前位置:   article > 正文

【Linux】Linux小程序-进度条_linux 小程序

linux 小程序

目录

        一、\r和\n的理解

        二、行缓冲区概念

        三、进度条源代码


一、\r和\n的理解

\r:回车;

\n:换行;

    那么请问这两个有什么区别呢?

    比如:我们在编写内容的时候,一行没有写完的情况下,需要换到下一行的开始位置,此时需要两个步骤:

    (1)让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行(\n)

    (2)在第二行让光标跳到最开始的位置,这个操作就是回车(\r)

    话不多说,我们进行下面的例子,就可以一目了然,

    <1>\n和\r都存在

 既有回车又有换行,所以执行完命令之后,光标会在下一行的开头。

 

    <2> \n存在

只有换行的时候,我们运行出来和上面第一种情况相同,原因是,在C语言环境下,自动将其简化,此时的\n就表示回车加换行。

     <3>\r存在 

只有回车,我们可以想象到运行的结果是什么样,答案是:什么都不显示。为什么呢?

  • 回车之后,光标来到了文本行的开始位置,此时linux的命令行就会从光标处开始,将我们的文本覆盖掉,我们就什么也看不到。

 

二、行缓冲区概念

首先先看看下面3段代码的现象: 

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. int main()
  4. {
  5. printf("hello world!\n");
  6. sleep(3);
  7. return 0;
  8. }

结果:直接打印出hello world!,然后停留3秒之后换行给出新的命令。  

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. int main()
  4. {
  5. printf("hello world!");
  6. sleep(3);
  7. return 0;
  8. }

刚开始不显示,停留3秒之后,在一行中显现hello world!和新的命令行。  

说明在刚开始运行的时候,数据被存在行缓冲区中的,3秒过后,才刷新出来。

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. int main()
  4. {
  5. printf("hello world!");
  6. fflush(stdout);
  7. sleep(3);
  8. return 0;
  9. }

 直接显现hello world!,然后停留3秒之后,在其后面直接给出新的命令行。

三、进度条源代码

(1)proc.h

  1. #pragma once
  2. #include <stdio.h>
  3. void process();

(2)proc.c 

  1. void process()
  2. {
  3. const char *lable = "|/-\\";
  4. char bar[SIZE];
  5. memset(bar,0,sizeof(bar));
  6. int i = 0;
  7. while(i<=100)
  8. {
  9. printf("\033[42;32;31m[%-100s\033[0m][%d%%][%c]\r",bar,i,lable[i%4]);
  10. fflush(stdout);
  11. bar[i++]=STYLE;
  12. usleep(100000);
  13. }
  14. printf("\n");
  15. }

(3)main.c 

  1. #include "proc.h"
  2. int main()
  3. {
  4. process();
  5. return 0;
  6. }

运行结果:


 本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

 老铁们,记着点赞加关注!!!

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

闽ICP备14008679号