• 实现一个简单的进度条


       我们平常在下载软件或者安装软件时都会看到进度条,下面我们分析一下,并实现一个简易的进度条

    1、首先我们用[]固定在左右两边,中间预留空间,然后用'='进行填充在这里我们用"="表示1%,通过增加字符

    来保证进度的增加。printf("[%-100s] ",str); 格式化输出。'-'表示左对齐 100表示列宽,' '表示回车,即每

    次打印完使光标回到行首在这里需要解释一下' '和' '这两个概念

    回车:' ',表示回到当前行的行首
    换行:' ',表示光标进入下一行
    2、加睡眠时间,如果不加睡眠时间,结果一下就全打印出来,那就不是进度条了。
    linux下sleep时间单位为秒,这样的话感觉间隔时间有点长,于是又有了usleep函数
    我们可以通过man 来查看这连个函数:

    3、在观察程序输出结果是会发现它是一段一段显示,这和我们平常见到的
    进度条不一样。究其原因,发现是printf()的原因,,printf是先将要输出的内容

    写到缓冲区里,然后再刷新。

    现在来看一下UNIX里面关于标准IO的几种缓冲机制:
    <1>全缓冲:指的是系统在填满标准IO缓冲区之后,才进行实际的IO操作
    ;磁盘上的文件通常由标准IO库实施全缓冲
    <2>行缓冲:标准IO在输入输出时遇到换行符( )的时候才将缓冲区的内容
    写入到标准输入输出的磁盘文件。注意:当流涉及到终端时
    通常使用的是行缓冲
    <3>无缓冲:指的是标准IO库不对字符进行缓冲存储,
    注意:标准出错流stderr通常是无缓冲。

    printf()是一个行缓冲函数,先写到缓冲区中,满足刷新条件才将缓冲区的内容刷新到对应的文件中
    ,刷新缓冲区的条件如下:
    (1)缓冲区已满;
    (2)遇到 ;
    (3)调用ffush手动刷新缓冲区;
    (4)调用scanf()从缓冲区读取数据时,也会将缓冲区的数据刷新;
    满足上面的任意一个条件缓冲区就会刷新
    代码如下:

     1 void Proc()
     2 {
     3   int rate = 0;
     4   char str[102] = {0};
     5   const char* arr = "-\|/";
     6   while(rate<=100)
     7   {
     8       str[rate]='=';
     9       printf("[%-100s],%d%% ,[%c]
    ",str,rate,arr[rate%4]) ; //%d%%d 打印百分比%%也可以用\%代替
    10       rate++;
    11      fflush(stdout);
    12        usleep(1000000);
    13    }
    14 }
    15 int main()
    16 {
    17     Proc();
    18   return 0;
    19 }


    效果展示:

    4.最后补充一点,编写Makefile文件

      
     直接输入make 就会生成Proc文件
     执行程序命令 ./Proc
     执行完之后记得清理解决方案

  • 相关阅读:
    排序-希尔排序
    排序-选择排序
    排序-插入排序
    排序-冒泡排序
    微服务容错处理—Hystrix初探
    声明式REST调用—Feign初探
    linux常用搜索文件命令
    Volecity模板引擎学习笔记
    页面间传递前端请求参数和获取参数:Model model,HttpServletRequest request, ModelMap map参数使用与区别
    httpServeltRequest和Model传值的区别
  • 原文地址:https://www.cnblogs.com/xmc2017/p/6277482.html
Copyright © 2020-2023  润新知