当前位置: 首页 > news >正文

【C++】std::cout与std::cin缓冲区

C++输入输出缓冲区:

由于iostream中的cin和cout设有缓冲区(iostream的每个输出流都管理一个缓冲区,用来保存程序读写的数据),当用户要对外部设备写入或读出数据时,会默认将需输出到流对象的内容先放入缓冲区,并不会立即输出,当缓冲区收到刷新信号时,先将数据写入或读出,然后再刷新缓冲区,即清空缓冲区,进行下一轮的读写操作。

缓冲区接收到什么样的信号才将其视为刷新信号?

1.缓冲区已满,当继续向缓冲区写入数据时,写入/读出缓冲区数据,然后刷新缓冲区,再写入下一个数据

2.执行flush、endl或ends等语句时,假设你cout一段字符串,且字符串长度适合不至于过长,那么当你在每个字符串后不输入endl换行操作,而在全部字符串后输入时,你会发现,在终端上是没有任何的输出的,直到endl执行后,执行换行操作,同时将缓冲队列内容强制输出并清楚缓冲队列。其中,flush刷新缓冲区,但不输出任何额外的字符,而ends向缓冲区插入一个空字符,然后刷新缓冲区

3.程序正常结束时,作为main函数的return操作的一部分,刷新缓冲区

4.通过unitbuf操纵符设置流的内部状态,清空缓冲区。默认情况下,对cerr是设置unitbuf的,因此写到cerr的内容都是立即刷新的

5.cin和cout切换时,比如说当你用cin接收,但是你并没有给缓冲区刷新的信号,此时,由于cin和cout的缓冲区是捆绑的,当你紧接着使用cout时,缓冲区则会自动的刷新,进行cout语句的写入


http://www.mrgr.cn/news/68649.html

相关文章:

  • Scaffold-ETH 2:颠覆传统开发的区块链神器,快速构建你的去中心化应用!
  • 实习冲刺Day16
  • 基于Python的旅游景点推荐系统
  • Docker基本概念汇总(更全面了解Docker)
  • iOS灵动岛动画小组件怎么播放动画
  • Linux系列-进程的状态
  • 基于微信小程序的电子购物系统的设计与实现(lw+演示+源码+运行)
  • 第二篇-进阶-第十四章-上传与下载
  • 指针的运用
  • 数据库基础(9) . DML-多表操作
  • C++11的简介
  • 【go从零单排】error错误处理及封装
  • 电脑Windows藏着的高手——WMIC命令
  • MySQL数据库基础(一) MySQL安装及数据类型
  • 电商企业店云账户提现探析
  • 【Ant.design pro】 formRef 用法
  • C++ 二分法
  • 中小跨境卖家如何选择物流?
  • 如何使用 Python 语言的正则表达式进行网页数据的爬取?
  • 算法 -排序 -插入,选择
  • 2024外贸独立站指南:3个提高转化的问题所在!
  • 反反爬-课上实验
  • LLM | 论文精读 | CVPR | 基于问题驱动图像描述的视觉问答增强引言
  • 【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)
  • 企业高效运转秘诀,揭秘工单系统双重价值
  • 【vue2.7.16系列】手把手教你搭建后台系统__刷新问题(17)