C/C 输入输出缓冲区

【导读】:本文介绍C与C 输入输出缓冲的一些操作与特性。

以下是正文


(1)c 中cin、cout,cerr和c的stdin、stdout、stderr都是同步的,即iostream 对象和 and cstdio流是同步的,同步关系如下:

同步即表明我们可以在程序中混合用cout和printf或其他对应的流对。可以用std::ios_base::sync_with_stdio(false)来取消这种同步,取消后,如下程序中cout和printf就不是按照预期的顺序输出

std::ios_base::sync_with_stdio(false);for(int i = 0 ; i < 10; i  ){     cout<<"1 ";     printf("2 ");}

windows下输出是:

2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1

linux下是:

1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2

正是因为这种同步,所以cin、cout比scanf、printf速度要慢,如果我们在使用cin、cout输入输出前加一句std::ios_base::sync_with_stdio(false),其实速度和scanf、printf差不多。

 

(2)以下程序

for(int i = 0 ; i < 10; i  ){    cout<<"1 ";}    while(1);

以上程序在windows下立即输出10个1,linux下不输出。说明windows下默认cout是无缓冲的(window可以通过cout<bufsiz来查看缓冲区大小,windows不能这么做),linux下是有缓冲的。(cout换成printf也是一样)

 

(3)我们可以通过函数setbuf 和 setvbuf 自己设置输入输出流的缓冲区,需要注意的是不管程序中申请的的缓冲区实际大小为多少,setbuf都将缓冲区设置的大小为BUFSIZ(这个宏在windows下是512,ubuntu下是1024), setvbuf则可以设置缓冲区大小以及缓冲区的模式(行缓冲、全缓冲、无缓冲),需要注意的是这两个函数设置的是c的输入输出缓冲区,因为c 和c的缓冲区是同步的,所有该函数会对c 有影响

char buf[1024];setbuf(stdout, buf);for(int i = 0 ; i < 10; i  ){    cout<<"1 ";}while(1);

此时windows和linux下都没有输出1

 

(4)因为默认情况下,cin是和cout绑定的,cin 会刷新cout的缓冲区,可以用函数cin.tie(0)来解绑定。所以在上面代买的基础上,在while(1); 前面加上:int a; cin>>a; 此时所有的1就可以输出了。

char buf[1024];setbuf(stdout, buf);for(int i = 0 ; i < 10; i  ){    cout<<"1 ";}int a; cin>>a;while(1);

加上cin.tie(0)后,以下的代码没有输出1,因为cin已经和cout解绑定了,cin刷新不了cout的缓冲区。(可以cin.tie(&cout)来绑定,注意cout没有tie方法)

char buf[1024];setbuf(stdout, buf);cin.tie(0);for(int i = 0 ; i < 10; i  ){   cout<<"1 ";}int a; cin>>a;while(1);

有点奇怪的是以下代码还是会输出1,即默认缓冲区的情形下,接触绑定没有产生效果。stackoverflow是这样解释的

cin.tie(0);for(int i = 0 ; i < 10; i  ){    cout<<"1 ";}int a; cin>>a;while(1);

- EOF -

来源:JustDoIT

https://www.cnblogs.com/TenosDoIt/p/3733243.html

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

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

相关文章

android 活动销毁不了,即使活动已经销毁,AsyncTask也不会停止

我想添加一个信息补充&#xff0c;并给出一个指向库或2的指针&#xff0c;可以用于长时间运行的AsyncTask&#xff0c;甚至可以用于面向网络的asynctasks。AsyncTasks专为在后台执行操作而设计。是的&#xff0c;您可以使用该cancel方法停止它。当您从Internet下载内容时&#…

python输入input数组_python怎么输入数组

python怎么输入数组&#xff1f; python输入数组 一维数组&#xff1a;arr input("") //输入一个一维数组&#xff0c;每个数之间使空格隔开 num [int(n) for n in arr.split()] //将输入每个数以空格键隔开做成数组 print(num) //打印数组 一维数组输入输出示例&a…

eclipse 扩展_Eclipse扩展的轻量级集成测试

eclipse 扩展最近&#xff0c;我为Eclipse扩展点评估引入了一个小助手。 辅助程序努力减少通用编程步骤的样板代码&#xff0c;同时增加开发指导和可读性。 这篇文章是希望的后续文章&#xff0c;它显示了如何将实用程序与AssertJ定制断言结合使用&#xff0c;以编写针对Eclip…

深入理解右值引用,move语义和完美转发

move语义最原始的左值和右值定义可以追溯到C语言时代&#xff0c;左值是可以出现在赋值符的左边和右边&#xff0c;然而右值只能出现在赋值符的右边。在C 里&#xff0c;这种方法作为初步判断左值或右值还是可以的&#xff0c;但不只是那么准确了。你要说C 中的右值到底是什么&…

android startanimation 回调,ScheduledThreadPoolExecutor执行莫名停止问题Android几个动画回调运行线程...

本文记录两个问题&#xff1a;ScheduleThreadPoolExecutor莫名停止执行。Animation和Animator两个动画回调监听 运行在哪个线程。一&#xff1a;ScheduleThreadPoolExecutor问题&#xff1a;ScheduledThreadPoolExecutor中scheduleWithFixedDelay(command, initialDelay, delay…

java future用法_纯干货:Java学习过程中的21个知识点和技术点

我们在Java学习过程中要学会抓重点&#xff0c;善于总结&#xff0c;Java学习过程中常见的21个知识点和技术点你知道吗&#xff1f;下面和千锋广州小编一起来看看吧&#xff01;1. JVM相关对于刚刚接触Java的人来说&#xff0c;JVM相关的知识不一定需要理解很深&#xff0c;对此…

zz测试接口_使用FizzBu​​zz和JUnitParams进行单元测试

zz测试接口我有时使用FizzBu​​zz向新手演示单元测试的基础。 尽管FizzBu​​zz确实是一个简单的问题&#xff0c;但它也可以用于演示更高级的单元测试技术&#xff0c;例如实现参数化测试。 FizzBu​​zz的可能解决方案之一是&#xff1a; public class FizzBuzz {private …

如何优雅地检测类型/表达式有效性?

注1&#xff1a;本文至少需要编译器支持C 11。注2&#xff1a;本文不考虑使用宏。一、老办法在写C 的时候&#xff0c;有时候可能需要检查一个类是否有特定的成员类型&#xff0c;例如&#xff1a;// 检查 T::type 是否存在&#xff0c;存在则 value 为 true&#xff0c;否则为…

html的页面宽高变形问题,CSS+div 设计的网页在不同浏览器中变形的问题

给别人做了一个web&#xff0c;自己这边正常&#xff0c;一到对方&#xff0c;机器上&#xff0c;发现变形了&#xff0c;真郁闷&#xff0c;后来才发现时IE7.0惹得祸&#xff0c;没有办法&#xff0c;学习呗。如何使网页在IE7.0和火狐中不变形&#xff1f;以下的方法可行&…

python爬虫开发 从入门到实战_python网络爬虫从入门到实战开发

1、简单的抓取网页 from urllib import request reqrequest.Request("http://www.baidu.com") responserequest.urlopen(req) htmlresponse.read() htmlhtml.decode("utf-8") print(html) 2、这里补充点Post和Get提交数据的差别 如果使用POST提交表单数据&…

swagger api文档_带有Swagger的Spring Rest API –公开文档

swagger api文档创建API文档后&#xff0c;将其提供给涉众很重要。 在理想情况下&#xff0c;此发布的文档将足够灵活以解决任何最后的更改&#xff0c;并且易于分发&#xff08;就成本以及完成此操作所需的时间而言&#xff09;。 为了使之成为可能&#xff0c;我们将利用我在…

html 页面重复度高,哪些情况容易造成重复页面

摘要在很多情况下我们明明没有发布重复页面&#xff0c;但为什么产生重复呢&#xff1f;下面我们一起来看看哪些情况容易造成重复页面&#xff1f;以及我们应该如何处理&#xff1f;abc.comabc.com/index.html在浏览器地址栏中输入这四个不同的URL链接&#xff0c;打在很多情况…

nuxt解决首屏加载慢问题_一个 Node 脚本让你的前端项目加载速度飞起来

写在最前面我的原创什么声明变成什么鬼了……前言随着前端三大框架的盛行&#xff0c;越来越多的前后端分离项目在服务器上跑了起来&#xff0c;随之而来&#xff0c;开发者也慢慢发现了这种开发模式所带来的弊端&#xff0c;其中之一就是首屏加载速度特别慢&#xff0c;因为虽…

数据库连接配置tomcat_Tomcat到Wildfly:配置数据库连接

数据库连接配置tomcat该摘录摘自《 从Tomcat到WildFly 》一书&#xff0c;您将在其中学习如何将现有的Tomcat体系结构移植到WildFly&#xff0c;包括服务器配置和在其顶部运行的应用程序。 WildFly是完全兼容的Java Enterprise Edition 7容器&#xff0c;与Tomcat相比&#xf…

左值、右值、左值引用、右值引用

【导读】&#xff1a;本文主要详细介绍了左值、右值、左值引用、右值引用以及move、完美转发。左值和右值左值&#xff08;left-values&#xff09;&#xff0c;缩写&#xff1a;lvalues右值&#xff08;right-values&#xff09;&#xff0c;缩写&#xff1a;rvalues直接上官网…

itex将html转成pdf加水印,itext操作PDF文件添加水印

功能描述&#xff1a;添加图片和文字水印/**** 【功能描述&#xff1a;添加图片和文字水印】 【功能详细描述&#xff1a;功能详细描述】* param srcFile 待加水印文件* param destFile 加水印后存放地址* param text 加水印的文本内容* param textWidth 文字横坐标* param tex…

wxpython界面切换_wxpython实现按钮切换界面的方法

本文实例为大家分享了wxpython按钮切换界面的具体实现代码&#xff0c;供大家参考&#xff0c;具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,u登陆,size(370,280),stylewx.MINIMIZE_BOX| wx.…

jboss 4.3.0_JBoss BPM Suite 6.0.3版本的5个实用技巧

jboss 4.3.0上周&#xff0c;红帽发布了JBoss BPM Suite的下一个版本&#xff0c;标记为6.0.3 &#xff0c;已订阅的用户可以在其客户门户中使用。 如果您对本发行版中的新增功能感到好奇&#xff0c;请在客户门户网站上在线查看发行说明和其余文档 。 我们正在寻找一些简单的…

C 条件变量使用详解

condition_variable介绍在C 11中&#xff0c;我们可以使用条件变量&#xff08;condition_variable&#xff09;实现多个线程间的同步操作&#xff1b;当条件不满足时&#xff0c;相关线程被一直阻塞&#xff0c;直到某种条件出现&#xff0c;这些线程才会被唤醒。其主要成员函…

HTML5新布局元素布局,HTML5新的布局元素

HTML5相对于HTML4新增了一些布局元素新增布局标签的优点&#xff1a;⒈更加注重文档的结构内容而不是以什么形式展现出来⒉对人的友好&#xff0c;更加语义化&#xff0c;增加代码的可读性⒊对计算机友好&#xff0c;浏览器更容易解析新增布局标签的内容&#xff1a;新增的布局…