详细讲解缓冲区

目录

理解回车和换行(\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回车,使得光标再次移动到这一行的最左边,这样下次打印就会从光标处重新输出,覆盖之前的的数字。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nodejs 第四十章(prisma)

什么是 prisma? Prisma 是一个现代化的数据库工具套件,用于简化和改进应用程序与数据库之间的交互。它提供了一个类型安全的查询构建器和一个强大的 ORM(对象关系映射)层,使开发人员能够以声明性的方式操作数据库。 Prisma 支持…

EasyRecovery破解版补丁免费钥匙下载

说起数据恢复软件,相信没有小伙伴不知道EasyRecovery这个软件吧,该软件具有快捷、高效、便捷的特点,且提供的功能也非常全面,不仅可以恢复各样被删除的文件、视频、图片等,还可以支持SD卡数据恢复,TF卡等各…

深入浅出CChart 每日一课——快乐高四第六十一课 飞梯十二重,CChart三维曲线图绘制

同学们好,今天继续介绍CChart本身的功能。接下来这几节课呢,笨笨老师准备对CChart的三维视图和场图功能进行详细一些的介绍。本节课首先介绍三维曲线图。 CChart软件库的开发,首先是从二维曲线图开始的,这一部分经过长时间的打磨…

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇: 解析token: 统一携带token: 驼峰命名与下划线命名转换: NotEmpty!!! mybatis: PageHelper设置后,会将pageNum,和pageSize自己拼接…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…

Spring Session:入门案例

Spring Session provides an API and implementations for managing a user’s session information. Spring Session提供了一种用于管理用户session信息管理的API。 Spring Session特点 传统的Servlet应用中,Session是存储在服务端的,即:Ses…

聚道云软件连接器:高科技企业财务自动化,提升效率准确性!

客户介绍: 某互联信息技术有限公司是一家专业从事信息技术服务的高科技企业,在业内享有较高的知名度和影响力。近年来,公司业务快速发展,对信息化建设提出了更高的要求。 客户痛点: 在传统情况下,该公司的…

【探索Linux】—— 强大的命令行工具 P.23(线程池 —— 简单模拟)

阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下,线程池是一种常见的并发编程模型,它能够有效地管理…

大模型综述总结--第一部分

1 目录 本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结,仅供学习,侵权联系就删 目录如下图 本次只总结一部分,刚学习有错请指出,VX关注晓理紫,关注后续。 2、概述…

字符函数和字符串函数(C语言进阶)(一)

前言 C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于哪些对它不做修改的字符串函数。 1、函数介绍 1.1 strlen strlen:计算字符串长度 看一个代码&…

“AI教父”李一舟翻车,中国AI培训路在何方

近日,AIGC领域掀起了一场不小的风波,知名AI博主李一舟在各大平台推出的AI课程突然下架,其账号遭到禁止关注的情况。 这一事件不仅引发了广泛关注和热议,更让许多真正想学习AIGC的用户感到迷茫和困惑:在众多的AIGC课程中…

ONLYOFFICE 桌面编辑器现已更新至v8.0啦

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

一个div最简方法画太极图

一个div最简方法画太极图 直接上代码&#xff0c;一目了然 html <div class"太极图"/>css .太极图 {position: relative;width: 400px;height: 400px;background: linear-gradient(to right,white 50%,black 50%);border-radius: 50%;box-shadow:0 0 12px …

c#高级——插件开发

案例&#xff1a;WinForm计算器插件开发 1.建立插件库&#xff0c;设置各种自己所需的插件组件 如下图所示&#xff1a;进行了计算器的加减法插件计算组件 Calculator_DLL为总插件父类 Calculator_DLL_ADD 为插件子类的控件对象 Calculator_DLL_Sub Calculator_DLL_Factory 为…

Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

目录 ​编辑 一、集合框架 二、 Map集合 特点 遍历方式 HashMap与Hashtable的区别 TreeMap Collections Arrays 一、集合框架 二、 Map集合 Map集合是一种键值对的集合&#xff0c;其中每个键对应一个值。在Java中&#xff0c;Map接口定义了一种将键映射到值的数据结…

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Windows 计算机上运行 Linux 环境&#xff0c;而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…

喝多少瓶汽水

喝多少瓶汽水 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果: 题目描述&#xff1a; 水已知1瓶汽水1元&#xff0c;2个空瓶可以换⼀瓶汽水&#xff0c;输入整数n&#xff08;n>0&#xff09;&#xff0c;表示n元钱&#xff0c;计算可以多少汽水&a…

Unity(第四部)新手组件

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

通过Colab部署Google最新发布的Gemma模型

Gemma的简单介绍 Gemma 是一系列轻量级、最先进的开放式模型&#xff0c;采用与创建 Gemini 模型相同的研究和技术而构建。 Gemma 由 Google DeepMind 和 Google 的其他团队开发&#xff0c;其灵感来自 Gemini&#xff0c;其名称反映了拉丁语 gemma&#xff0c;意思是“宝石”…