Linux第一个小程序-进度条(缓冲区概念)

1.\r和\n

C语言中有很多字符

a.可显字符

b.控制字符

对于回车其实有两个动作,首先换行,在将光标指向最左侧

\r :回车

\n:换行

下面举个例子:

efeff44c25cde8e0775add30fbe698dd.png
8e77954370843e4083c52c8522fa7ada.png

把\n去掉会怎样

b68b706f2327aa259f754854ca621b8f.png
beb92e0c6b951377eb4e08ff9d5d719c.png

什么都没输出。为什么?

2.缓冲区概念

观察下两个代码的区别

408e3288f7136a45418325a81c16a7d4.png
0590689b6c13e9f3f05305c15c47421e.png

上面的代码会等待3s后才输出,而下面的代码会直接输出。

不加\n好像是先执行了sleep,在执行printf?

并不是!!! 一定是先执行完printf,在执行sleep

Hello Linux没有被刷新,数据一定是在sleep期间被保存起来了,为什么\n,数据就显示出来了呢?

缓冲区有自己的刷新策略,只要看到\n,就会刷新

4eb43c6e3faeb3022440195d9df1a32c.png
d315e370c44a175f1ac5e3d167e09489.png

为什么没有显示Hello Linux 因为\r将光标移到了最左侧,然后显示的Hello Linux被root@ikun test覆盖。光标跟显示器匹配,光标在哪里,显示器就显示在哪里!

倒计时小程序

93f9222f31083ad3bab12605a4938051.png
d96507b78606ed1ae7618e3cb207f2f0.png

什么都没有显示

改写,刷新缓冲区

fc21f976ff814b8f7492d9bd64a973e5.png
8164f1a7f387214b2b55011eb684d1e3.png

结果是从屏幕上倒计时从9到0

如果从10开始倒计时呢?

586aed32363bda04129f16dec45caf93.png
8a794133c22ad67ad482999a5963623a.png

3.进度条程序

文件分离

ec15f302bfa66979af38d1b5459fceca.png

proc.h


#pragma once
#include <stdio.h>  
#include"proc.h"
#include<string.h>
#include<unistd.h>  //该头文件是Linux下的,windows没有#define SIZE 101
#define STYLE '='
#define ARR '>' 
extern void process();

proc.c


#include "proc.h"
void process()
{char bar[SIZE];memset(bar, '\0', sizeof(bar));  //初始化barint i = 0;while (i <= 100){printf("[%-100s][%d%%][%c]\r", bar, i);   //-100左对齐,fflush(stdout);  //刷新缓冲区bar[i++] = STYLE;if (i != 100)bar[i] = ARR;usleep(100000);}printf("\n");
}

main.c


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

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序性能优化

一、提高小程序速度 优化小程序的速度是最基本的需求之一&#xff0c;因为流畅的使用体验对于用户来说非常重要。可以采取以下措施来提高小程序的速度&#xff1a; 压缩代码 编写高效的代码是提高小程序速度的关键之一&#xff0c;开发者可以使用一些工具来对代码进行压缩&…

网工内推 | 网络安全工程师,最高15K,有高温补贴

01 超圣信华 招聘岗位&#xff1a;网络安全工程师 职责描述&#xff1a; 1. 负责网络安全产品的售前沟通交流、现状调研、方案设计、产品测试、产品选型和招投标等工作。 2. 负责网络安全集成项目的实施管理、项目交付文档编制以及项目验收等工作。 3. 负责网络安全产品的售后…

Vue中对对象内容调用的Demo

目录 1.对象作为数据&#xff1a; 2.对象数组 在Vue中&#xff0c;你可以通过对象的键来调用对象中的各个部分的内容。下面是一些使用Vue调用对象各部分内容的示例&#xff1a; 1.对象作为数据&#xff1a; 如果你在Vue实例的数据中有一个对象&#xff0c;你可以使用点语法来…

C#中i++和++i的底层原理

一&#xff1a;前言 我们都知道&#xff0c;i是先取值&#xff0c;后计算。i是先计算&#xff0c;后取值。下面说下它的底层原理 运算符优先级与运算顺序&#xff1a; 运算符的优先级只是影响了表达式中的结合顺序&#xff0c;不会影响运算顺序&#xff0c;运算顺序永远都是从…

在云服务器上,clone github时报Connection timed outexit code: 128

文章目录 问题解决方案 问题 在执行pip install安装依赖时&#xff0c;需要clone github代码&#xff0c;此时报了Connection timed out&exit code: 128错误&#xff0c;原因是访问超时了&#xff0c;此时需要使用代理 fatal: unable to access https://github.com/hugg…

【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比

【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比 一、数据设置 1、7输入1输出 2、103行样本 3、80个训练样本&#xff0c;23个测试样本 二、效果展示 NN训练集数据的R2为&#xff1a;0.73013 NN测试集数据的R2为&#xff1a;0.23848 NN训练集数据的…

Python tqdm的两种用法【教程】

Python tqdm的两种用法 本文记录一下在学习深度强化学习过程中遇到tqdm库显示进度条的用法&#xff0c;以供大家交流。 注意本文使用的tqdm均是使用的tqdm库中的同名tqdm方法&#xff0c;应该按照如下方式导入 from tqdm import tqdmCatologue Python tqdm的两种用法1. 基于可…

在Spring Boot框架中使用拦截器实现URL限制

限制URL列表的JSON格式可以根据您的需求进行定义。以下是一个示例&#xff1a; { "restrictions": [ { "url": "/api/endpoint1", "params": { "param1": "value1", "param2": "value2" } },…

RUST 有哪些整型?

在Rust中&#xff0c;有以下几种整型数据类型&#xff1a; i8 &#xff1a;有符号8位整型&#xff0c;取值范围为-128到127。u8 &#xff1a;无符号8位整型&#xff0c;取值范围为0到255。i16 &#xff1a;有符号16位整型&#xff0c;取值范围为-32768到32767。u16 &#xff1…

CUDA并行编程

并行编程 参考 1. pthread 求素数 // PrimesThreads.c // PrimesThreads.c// threads-based program to find the number of primes between 2 and n; // uses the Sieve of Eratosthenes, deleting all multiples of 2, all // multiples of 3, all multiples of 5, etc./…

淘宝开放平台API接口用法介绍

淘宝是中国最大的电子商务平台之一&#xff0c;其开放平台API接口为开发者提供了强大的数据支持。在本篇文章中&#xff0c;我们将从多个方面对淘宝开放平台API接口进行详细阐述。 一、API概述 淘宝开放平台提供了丰富的API接口&#xff0c;涵盖了商品、店铺、交易、物流、用…

使用Update修改不报错但是修改不成功

使用Update修改不报错但是修改不成功 sql执行后 后台日志说影响行数为0。然后发现是id不存在。 因为项目中使用自动生成ID&#xff0c;使用的是雪花算法&#xff0c;长度超过了前端js可处理长度&#xff0c;所以当后台id传到前台后会丢失精度&#xff0c;导致无法匹配到要修改…

解决Mysql报错2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)

1.找到mysql文件夹&#xff0c;将my,ini文件放入bin文件夹 2.管理员模式打开cmd 3.输入netstat -ano查看端口占用情况&#xff0c;这里我已经开启mysql应用&#xff0c;所以会有3306&#xff0c;如果没有开启是不会有的 4.输入sc delete mysql&#xff0c;删除mysql服务 5.将…

接口自动化报告,生成本地服务并自动打开时失败

错误原因&#xff1a; 端口号被占用 首先可以在cmd中调出命令窗口然后执行命令netstat -ano就可以查看所有活动的链接&#xff0c;找到被占用的端口号 1、通过命令taskkill /f /t /im "进程名称" &#xff0c;根据进程的名称杀掉所有的进程。或者taskkill /f /t /p…

嵌入式开发的学习内容和技能包括:

. 熟悉C语言编程 掌握基础电子知识&#xff0c;如数字电路、模拟电路和单片机 .熟练掌握嵌入式操作系统的原理、内核架构和应用&#xff0c;如Linux、RTOS等 了解各种外设接口及其驱动程序开发&#xff0c;如SPI、I2C、USART等 熟悉常用的嵌入式开发工具和软件工程流程&#…

如何通过 5 步激活策略扩大用户群

假设&#xff0c;你现在是一个“深藏功与名”的增长黑客。前期你表现非常好&#xff0c;做了一些拉新实验&#xff0c;每天都有上千用户进入到产品。团队成员和家人朋友都非常开心你们的产品增长终于有了起色。 然而&#xff0c;如果你不重视拉新&#xff08;acquisition&…

ES6系列之let、const、箭头函数使用的坑

变量提升块级作用域的重要性箭头函数this的指向rest参数和arguments 1.ECMAScript与Js的关系 2.Babel转码器 Babel是一个广泛使用的ES6转码器&#xff0c;可以将ES6代码转为ES5代码&#xff0c;从而在老版本的浏览器执行。这意味着&#xff0c;你可以用ES6的方式编写程序&…

【微服务】springboot整合redis哨兵集群使用详解

目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包 3.1.2 准备依赖环境 3.1.3 上传并解压包 3.2 执行安装 四、搭建redis主从集群 4.1 环境准备 4.2 搭建过程 4.2.1 创建实例文件目录 4.2.2 修改redis.conf配置文件 4.2.3 拷贝配置文件 4…

喜讯! WorkPlus入选中国信通院数字产品“2023全景图”!

“2023数字生态发展大会”暨中国信通院“铸基计划” WorkPlus喜讯 7月27日&#xff0c;中国信息通信研究院&#xff08;下称“中国信通院”&#xff09;主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在京召开&#xff0c;大会全面地总结了“铸基计划”上半…

Linux系统安装部署MongoDB完整教程(图文详解)

前言&#xff1a;本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程&#xff0c;我的服务器采用的是Centos7&#xff0c;在部署之前我重装了我的服务器&#xff0c;目的是为了干净整洁的给大家演示我是如何一步步的操作的&#xff0c;整体部署还是挺简洁&#xff0c…