std::ios_base::sync_with_stdio()

来源:互联网 发布:mac找不到硬盘 编辑:程序博客网 时间:2024/06/08 09:14

std::ios_base::sync_with_stdio()

今天在做OJ的时候意外地发现printf和cout的输出顺序和代码顺序不一样,如下

printf("Case Number %d: ", ++cas);if(takeTime[0][1] >= 0x3f3f3f3f) cout << "impossible\n";else cout << takeTime[0][1] << '\n';

得到的输出却是

impossibleimpossibleimpossibleCase Number 1: Case Number 2: Case Number 3: 

后来仔细地看了看,才发现问题是出在ios_base::sync_with_stdio()这个函数上。

这个函数当我们填入false的值时,相当于把C和C++的输入输出流解绑了,那么cout就能够拥有自己的缓冲区。如果我们去掉解绑的话,那么我们就会看到结果变得和我们预想的是一样了。

Case Number 1: impossibleCase Number 2: impossibleCase Number 3: impossible

所以将C++和C的输入输出流同步,是一种比较安全的方式,不要滥用ios_base::sync_with_stdio()

cin.tie()

还有一个值得一提的就是cin.tie().

和sync_with_sdtio类似,cin.tie()也是为了让输入输出变得比较安全的方式。当我们填入NULL或者0解绑之后,对于

cout << "Enter name:";cin >> name;

就会发现,是先输入,再输出’Enter name:’

这是因为解绑了输入输出之后cout需要在缓冲区写入之后才能执行

参考

  1. Significance of ios_base::sync_with_stdio(false); cin.tie(NULL)
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 跑步喝多了水怎么办 衣柜门轮子坏了怎么办 穿瑜伽裤下边有缝怎么办 3岁宝宝比较内向怎么办 我想和我同学搞基怎么办 自己做的葡萄酒太甜怎么办 吉米学校想退款怎么办 汽车租赁公司不退押金怎么办 身材不好怎么办健身教练形象照 反祈祷式做不到怎么办 窦性心跳过缓怎么办 四维彩超查出胎儿心脏有问题怎么办 减脂肚子饿了怎么办 做瑜伽腰扭到了怎么办 出了汗怎么办活动反思 农村都是老人和孩子怎么办 瑜伽垫容易出现痕迹怎么办 37岁失业了该怎么办 45岁找什么工作怎么办 华为手机4g网速慢怎么办 解析软件包时出现问题怎么办 一字马不能下去髋摆不正怎么办 练轮瑜伽骆驼式腰疼怎么办 感昌咳嗽老不好怎么办 我感昌一直不好怎么办 腰间盘突出晚上睡觉痛怎么办 天天吃撑了怎么办啊 一吸气就想咳嗽怎么办 鼻子堵住了怎么办没法吸气时 一只鼻子不通气怎么办 练瑜伽后特别饿怎么办 站一天小腿肿了怎么办 练腹肌腰粗了怎么办 大专不交学费.然后退学怎么办 练瑜伽压腿一字马受伤了怎么办 银行工作人员借钱不还怎么办 借钱不还跑了但有工作怎么办 亲戚家借钱不还怎么办 学习瑜伽教练口令好复杂怎么办 练瑜伽腿的柔韧性不够怎么办 瑜伽扭转时手抓不到脚怎么办