详细讲解缓冲区

目录

理解回车和换行(\r&&\n)

那如何实现单独的回车和换行呢?

 缓冲区

证明有缓冲区的存在

​编辑

怎么刷新缓冲区(显示器缓冲区)?

  fflush函数​编辑

缓冲区出现的意义

I/O流

模拟倒计时小程序来理解缓冲区


理解回车和换行(\r&&\n)

在我们的c语言中,\n表示的是换行,可是,实际上这里的换行有两个动作:回车+换行。回车就是将光标平移到一行的最左边,换行就是光标向下平移一行。像我们键盘上的“回车键”,按下回车键后执行的是两个动作:回车+换行。

这也是为什么之前的回车键设置成这样

那如何实现单独的回车和换行呢?

\r表示回车

\r\n 存在\r时,\n表示换行

\n表示回车加换行

 缓冲区

缓冲区(Buffer)是计算机科学中常见的概念,它是一块内存区域,用于存储临时数据。缓冲区的目的是在数据传输过程中缓存数据,以便更有效地处理和传递。

证明有缓冲区的存在

观察以下代码

为什么不是先打印hello再执行sleep函数呢?我们知道,c语言编译是从上往下顺序编译的,也就是说,编译器一定是先执行printf函数然后才是执行sleep函数

那为啥显示器不会马上显示printf的内容呢?

首先,显示器上能不能显示printf函数的内容,和printf函数能否执行是两码事。

也就意味着,printf函数的执行并不是直接输出到显示文件上,而是先输出到缓冲区,还没来得及从缓冲区输出到显示文件上,就执行sleep函数休眠了,这也是要等3秒才会打印出hello字符。

怎么刷新缓冲区(显示器缓冲区)?

1、程序结束的时候,一般会自动刷新缓冲区

2、缓冲区满了

3、遇到 \n 刷新前面的内容(按行刷新

4、显式调用缓冲刷新函数强制刷新(c语言中的fflush函数 )

  fflush函数

缓冲区出现的意义

性能优化: 缓冲区可以用来提高程序的性能。通过在内存中存储临时数据,程序可以利用缓冲区进行高效的读写操作,而不必每次都直接访问慢速的外部存储设备。这对于 I/O 操作(如文件读写、网络通信)和数据库访问等场景特别重要。

临时存储: 缓冲区提供了一种临时存储数据的方式。在处理大量数据时,可以使用缓冲区来存储部分数据,而不必一次性加载整个数据集。

数据交互: 缓冲区在数据交互过程中发挥关键作用。例如,通过在网络通信中使用缓冲区,可以将大块的数据分割成小块,减少网络传输的延迟,提高效率。

I/O流

c语言中,当我们启动一个程序的时候,系统会默认给我们打开三个标准的输入输出流:stdin、stdout、stderr 当我们用fflush(stdout)的时候,就会刷新显示器文件的缓冲区

这三个流其实就是三个文件的指针,可以实现基本的用户交互。也是为什么我们能写代码、看见代码、看见报错信息。 

模拟倒计时小程序来理解缓冲区

观察以下代码

 for循环10-0并输出i,每次用printf输出i的时候都用fflush强制刷新,这样我们就能马上将数字i从缓冲区打印到显示器上,我们再用\r回车,使得光标再次移动到这一行的最左边,这样下次打印就会从光标处重新输出,覆盖之前的的数字。

这样一来,我们就利用缓冲区这一概念完成了一个倒计时的小程序,简洁明了。 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

注册中心 Service Discovery --- Intro

注册中心 Service Discovery --- Intro 为什么需要注册中心注册中心的原理常用的注册中心注册中心的高可用 为什么需要注册中心 在微服务架构中,系统被拆分成了若干个独立的服务,因此服务之间需要进行通信和协作。为了实现服务的发现和调用,需…

nginx 模块 常见内置变量 location

一、nginx 模块 ngx_http_core_module 核心模块 ngx_http_access_module 访问控制模块 deny allow ngx_http_auth_basic_module 身份验证 小红小名(虚拟用户) ftp也有虚拟用户 ngx_http_gzip_module 压缩模块 ngx_http_gzip_static_modul…

猫头虎分享已解决Bug || 超时错误:TimeoutError: Request timed out after 30000ms.

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

SORA技术报告

文档链接:https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

Dear ImGui的UE5.3集成实践

Dear ImGui一直较为火热,这是一个调试使用并且可以响应快速迭代的Gui库,甚至可以做到在任何代码块中调用API即显示。如果你想更多的了解一下可访问其官方网站:https://www.dearimgui.org/ 那么本文就来在UE5中尝试踩坑使用它。 UE4.26版本 …

LeetCode 2476.二叉搜索树最近节点查询:中序遍历 + 二分查找

【LetMeFly】2476.二叉搜索树最近节点查询:中序遍历 二分查找 力扣题目链接:https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/ 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 qu…

微服务-微服务Spring Security6实战

1. Spring Security介绍 1.1 Spring Security定义 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框 架。 Spring Security 主要实现了 Authentication (认证,解决 who are you? ) 和…

R语言入门笔记2.6

描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值,在这里先集中介绍, col1是黑色,2是粉红,3是绿色,4是天蓝,5是浅蓝,6是紫红,7是黄色,…

公众号怎么线上公证?

公众号迁移有什么作用?只能变更主体吗?公众号迁移的作用可不止变更主体这一个哦!还可以把 A 账号的粉丝、文章素材、违规记录等迁移到 B 账号上。这样一来,你就可以在不失去原有粉丝的情况下,更好地管理和运营公众号啦…

Github 2024-02-23 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-02-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目4Python项目3TypeScript项目1HTML项目1Dart项目1Rust项目1 从零开始构建你喜爱的技术 创建周…

【前端素材】推荐优质后台管理系统XELORO平台模板(附源码)

一、需求分析 后台管理系统网站是指用于管理和控制网站、应用程序或系统后台运行的管理工具。它通常是网站或应用程序的管理者、管理员或内容编辑人员使用的界面,具有一系列功能来管理用户、内容、数据和系统设置。其功能和设计思路可以根据具体需求和系统复杂性有…

mybatis-plus 条件构造器的使用(QueryWrapper、UpdateWrapper和 LambdaQueryWrapper)

1、简介 为了实现简化操作,mybatis-plus 引入条件构造器简化基本 sql 操作,主要使用两种,一种是查询的条件构造器(QueryWrapper),另外一种是(UpdateWrapper),这些条件构造…

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决

宝塔的安装就不在这赘述了,只说下,启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码,无法登陆 然后点忘记密码,由于是docker安装的,根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…

pclpy Ransac平面分割算法输出的索引从点云中提取点云的子集

pclpy Ransac平面分割算法输出的索引从点云中提取点云的子集 一、算法原理二、代码三、结果1.sor统计滤波2.Ransac内点分割平面3.Ransac外点分割平面 四、相关数据 一、算法原理 1、Ransac介绍 RANSAC(RAndom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outlier…

Linux遇到黑客入侵,如何应急响应

来自:DevOps技术栈 一、服务器入侵现象 近期有一个朋友的服务器(自己做了网站)好像遭遇了入侵,具体现象是:服务器 CPU 资源长期 100%,负载较高。服务器上面的服务不能正常提供服务。 朋友处理了一会没有解…

反序列化 [NPUCTF2020]ReadlezPHP1

打开题目 直接查看源代码 打开源代码发现了个./time.php?source 访问一下 审计代码: 现存在反序列化语句:$ppp unserialize($_GET["data"]);和执行漏洞:echo $b($a); 发现在__destruct()方法里面有 echo $b($a); 这个是php的…

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增 数据源平台:用友NC65 用友NC是为集团与行业企业提供的全线管理软件产品,由亚太本土最大的企业管理软件提供商用友公司研发提供,用友NC率先采用J2EE架构和先进开放的集团级开发平台UAP&#xff0…

外星文明会是朋友还是敌人?科学家用AI模拟揭示惊人答案!

引言:人类与外星文明的潜在互动 自古以来,人类就对外太空充满了好奇与向往,无数科幻作品中都描绘了人类与外星文明的潜在互动。然而,这些互动并非总是和平友好的,正如物理学家Stephen Hawking所警告的,盲目…

K线实战分析系列之六:启明星——空方力量减弱信号

KK线实战分析系列之六:启明星——空方力量减弱信号 一、星线二、多种反转形态三、启明星形态四、启明星形态的总结 一、星线 星线在单根K线形态上是属于纺锤线,之所以被称为星线,主要是因为它在行情当中的相对位置,区别于其他纺锤…

Unity(第四部)新手组件

暴力解释就是官方给你的功能;作用的对象上面如: 创建一个球体,给这个球体加上重力 所有物体都是一个空物体,加上一些组件才形成了所需要的GameObject。 这是一个空物体,在Scene场景中没有任何外在表现,因为…