Linux-进度条小程序

06-01 1573阅读
1. 回车和换行的差异

在输出文本时,回车和换行符的作用是非常不同的。了解它们的行为有助于我们控制输出的方式。

  • 回车(\r):回车符将光标移到当前行的开头,但并不会自动换行。它的作用是覆盖当前行的内容。

  • 换行(\n):换行符不仅会换行,还会将缓冲区中的内容刷新到屏幕上。

    这意味着,当你使用\n时,程序会将当前缓冲区的内容刷新到屏幕上。而当你使用\r时,光标会回到行首,但缓冲区的内容并不会立即刷新,直到程序结束(return 0;)或者手动刷新。Linux-进度条小程序

    2、观察回车换行现象

    1.执行下面代码

    #include
    #include
    int main()
    {
        printf("hello linux\n");
        sleep(3);
        return 0;
    }

     现象:打印完字符串,然后休眠3秒,最后结束程序。

     Linux-进度条小程序

    2.执行下面代码 

    #include
    #include
    int main()
    {
        printf("hello linux\r");
        sleep(3);
        return 0;
    }

      现象:

    休眠3秒,程序就结束了。

    Linux-进度条小程序

    为什么使用\r就不能字符串了呢???

    这会牵扯到缓冲区的知识,我们在写一个缓冲区的点来详细讲解!!!  

     补充查询手册:

    输入命令:

    mam 3 sleep   # 三号手册才能查到我们想用的sleep

    Linux-进度条小程序 

    3. 缓冲区的工作原理

    在C语言中,输出通常是通过缓冲区实现的。这意味着程序并不会立刻将所有输出内容显示到屏幕,而是将它们保存在内存中,直到达到特定的条件才会刷新到屏幕上。

    • 行缓冲:标准输出流(如stdout)是行缓冲的。也就是说,只有在输出遇到换行符(\n)或者缓冲区满时,内容才会被刷新。

    • 手动刷新:通过调用fflush(stdout),你可以手动强制刷新缓冲区,立即将内容显示到屏幕上。

      这个机制在进行动态输出时特别重要。我们需要了解缓冲区的特性,才能精确控制程序的输出。

       4、usleep和fflush函数

      我们可以通过man手册先查询两个函数的基本用法。

      1. usleep函数

      功能:

      以微秒为间隔暂停执行,头文件为#include

      Linux-进度条小程序 

      2.fflush函数

      功能:

      重刷一个流。

      stdout -- 标准输出流 -- 屏幕

      stdin -- 标准输入流 -- 键盘

      stderr -- 标准错误流 -- 屏幕

       Linux-进度条小程序

      5、简单倒计时

       通过上面的简单重刷输出流,我们可以做一个简单的倒计时程序。

      要求:实现一个从10到0的倒计时效果。

      #include 
      #include 
      int main() {
          int cnt = 10;
          while (cnt >= 0) {
              printf("%-2d\r", cnt);  // 以2位宽度打印并左对齐
              fflush(stdout);         // 手动刷新缓冲区
              sleep(1);               // 暂停1秒
              cnt--;
          }
          printf("\n");  // 最后换行,避免被shell覆盖
          return 0;
      }
      
      6、进度条
      6.1、版本一

      此处我们安装C语言中的分文件实现此进度条,加上我们Linux中学习的makefile工具。

      首先我们创建四个文件:processbar.c  processbar.h  main.c  makefile

      processbar.c : 进度条函数的实现。

      processbar.h : 进度条函数的声明,头文件包含。

      main.c : 调用.h文件中的方法 。

      makefile : 自动化编译。

      进度条效果:

      • 第一个中括号就是表示进度条。
      • 第二个中括号表示进度。
      • 第三个表示旋转样式。

          makefile文件代码:

        processbar:processbar.c main.c
            gcc -o $@ $^
        .PHONY:clean
        clean:
            rm -f processbar

        processbar.h代码:

        #includ
        #include
        #include
         
        void ProcBar();

        processbar.c代码

        #include "processbar.h"   
          
        //字符串长度
        #define Length 101
        #define Style '#' //表示进度条的符号
         
        const char* label="|/-\\";//两个\\表示一个\,表示旋转样式
         
        //version1
        void ProcBar()
        {
            char bar[Length];//缓冲区长度 
            memset(bar,'\0',sizeof(bar));//将缓存区空间都改为\0
            int len=strlen(label);//字符串长度
            //循环往缓存区输入#
            int cnt=0;
            while(cnt
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码