【Linux】Linux小程序-进度条

news/2024/11/19 19:31:27/

目录

        一、\r和\n的理解

        二、行缓冲区概念

        三、进度条源代码


一、\r和\n的理解

\r:回车;

\n:换行;

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

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

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

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

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

    <1>\n和\r都存在

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

 

    <2> \n存在

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

     <3>\r存在 

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

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

 

二、行缓冲区概念

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

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world!\n");sleep(3);return 0;
}

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

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world!");sleep(3);return 0;
}

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

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

#include <stdio.h>
#include <unistd.h>
int main()
{printf("hello world!");fflush(stdout);sleep(3);return 0;
}

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

三、进度条源代码

(1)proc.h

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

(2)proc.c 

void  process()
{const char *lable = "|/-\\";char bar[SIZE];memset(bar,0,sizeof(bar));int i = 0;while(i<=100){printf("\033[42;32;31m[%-100s\033[0m][%d%%][%c]\r",bar,i,lable[i%4]);fflush(stdout);bar[i++]=STYLE;usleep(100000);}printf("\n");
}

(3)main.c 

#include "proc.h"int main()
{process();return 0;
}

运行结果:


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

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


http://www.ppmy.cn/news/75540.html

相关文章

《Reinforcement Learning: An Introduction》第1章笔记

文章目录 1.1 强化学习1.2 强化学习的例子1.3 强化学习的要素1.4 局限和范围1.5 拓展例子&#xff1a;井字游戏1.6 总结1.7 强化学习的早期历史参考资料 1.1 强化学习 强化学习是学习做什么—如何将情景映射到动作—以便最大化数字奖励信号。学习者不会被告知该采取什么动作&a…

XPath语法:在XML文档中定位和选择节点的利器

XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。它提供了强大的定位和选择能力&#xff0c;使开发人员能够准确、灵活地定位所需的元素。本篇博客将介绍XPath的语法和常用定位方法&#xff0c;帮助你在Web自动化测试等场景中更好地…

[Python]JWT认证与pyjwt包简介

文章目录 JWT认证简介构成载荷声明 pyjwt编解码flask中验证 JWT是一种JSON的行业标准&#xff0c;广泛应用在系统的用户认证方面。 JWT认证简介 JWT&#xff08;JSON Web Tokens&#xff09;&#xff0c;是为了在网络应用环境间传递声明而执行的一种开放的行业标准&#xff0…

Python 中的函数微分是如何实现的?

1. 如何编写计算函数微分的代码&#xff1f;举个简单例子 可以使用 PyTorch 中的自动微分功能来计算函数的导数。下面是一个简单的例子&#xff1a; import torch# 定义一个需要求导的函数 def f(x):return x ** 2 2 * x 1# 创建一个张量&#xff0c;并设置 requires_gradT…

第一个SpringBoot程序

如何创建一个SpringBoot项目&#xff0c;两种方式&#xff0c;官网或IDEA 官方提供了一个快速生成的网站&#xff0c;IDE集成了这个网站 spring官网 Spring | Homehttps://spring.io/进入spring官网&#xff0c;点击projects&#xff0c;点击SpringBoot&#xff0c;进到如下…

kicad学习笔记6:kicad启动及其grid参数设置和修改

1。kicad启动&#xff1a; single_top.cpp 启动函数&#xff1a; 1。 IMPLEMENT_APP( APP_SINGLE_TOP )2。 PGM_SINGLE_TOP::OnPgmInit()3。 PGM_BASE::InitPgm2。kicad参数 grid参数定义&#xff1a; struct GRID_SETTINGS {bool axes_enabled;std::vector<wxString&…

实时频谱-2.4窗口函数

窗口函数 在离散傅立叶变换(DFT)分析运算中&#xff0c;一个固有的假设是要处理的数据是单个周期定期重复的信号。例如&#xff0c;在图2-8中的帧2上应用DFT处理时&#xff0c;信号上会进行周期性扩展。 在连续的帧之间一般会发生不连续点&#xff0c;如图 2-9 所示。 这些人…

【PaperReading】Heterogeneous Graph Neural Network

Heterogeneous Graph Neural Network 1. 引言2. 问题定义2.1 内容关联异质图(Content-associated Heterogeneous Graphs)2.2 异质图表示学习(Heterogeneous Graph Representation Learning)3. HetGNN3.1 采样异质邻居节点(C1)3.2 编码异质的内容信息(C2)1 预训练分别得到不…