《转》cout和printf的混用而产生的顺序问题
原文地址:http://blog.renren.com/blog/340275217/731966815 作者:赵越
之前对于cout与printf()混用的结果的认识,源于某年北京赛区某judge的总结。据其称,某队在比赛时某题的输出混用了cout与printf(),结果输出的顺序出错。其把原因归结为一个带缓冲而一个不带缓冲。对此金强提出了置疑,因为stdio.h中定义了像ungetc()这样的函数,其作用是将字符放回到输入流中。可见stdio中也是使用了缓冲的。那么为什么cout与printf()混用会发生问题呢?
下面来做一些试验(环境:g++ (GCC) 3.2.3 (mingw special 20030504-1))。
#include <iostream> using namespace std;
int main() { cout << "aaa"; printf("bbb"); return 0; }
输出为:
aaabbb
没有问题。
如果将程序修改一下:
#include <iostream> using namespace std;
int main() { ios::sync_with_stdio(false); cout << "aaa"; printf("bbb"); return 0; }
输出成了:
bbbaaa
顺序发生了错误。
sync_with_stdio()是在<ios_base>中定义的,当其接受true作为参数时,将会同步iostream与stdio中的流操作。默认是true,因此第一个程序的结果是正确的。然而,尽管C++标准中规定stdio sync标志默认是true,不同平台下的不同编译器可能并不完全支持这个标准。因此也就有了通常意义上的关于“不要混用iostream与stdio”之类的警告。
如果再修改一下程序:
#include <iostream> using namespace std;
int main() { ios::sync_with_stdio(false); cout << "aaa" << flush; printf("bbb"); return 0; }
这回程序的输出就又正确了。因为flush强制清空了缓冲区,将其中的内容输出。
转载于:https://www.cnblogs.com/Lyush/articles/3281334.html
《转》cout和printf的混用而产生的顺序问题相关推荐
- 如何在MFC中使用cout和printf,输出到控制台
在MFC中使用cout和printf,输出到控制台 在GUI程序中使用printf函数以及cout函数的方法: #include <io.h> #include <fcntl.h ...
- C++ nlohmann/json 的主要用法(cout、printf打印,异常try...catch处理)
文章目录 前言 准备工作 引用头文件: 主要用法: 一.声明与构造 1 纯粹声明 2 内容构造 二.解析与序列化 字符串 解析 序列化 文件:// 比如有文件 c:\rankings.json,其内容 ...
- cout 和 printf 性能比较
今天刷OJ时,有个全排列的题目一直超时,当时是用的cout,然后换成printf果断 ac,因此,拥有执著的求知精神的我试试到底差别有多大. 测试用例是用printf 和 cout 分别输出从0~10 ...
- [笔记]cin、cout与scanf、printf的效率差异对比分析
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
- C++的cin和cout取消同步
虽然C++有cin函数,但看别人的程序,大多数人都用C的scanf来读入,其实是为了加快读写速度,难道C++还不如C吗!? 其实cin效率之所以低,不是比C低级,是因为先把要输出的东西存入缓冲区,再输 ...
- sync_with_stdio和cin.tie(0); cout.tie(0);
文章目录 sync_with_stdio tie ACM应用 sync_with_stdio 这个函数是一个"是否兼容stdio"的开关,C++为了兼容C,保证程序在使用了std: ...
- cin和cout提速
在主函数main开头加入一下三句,可以让cin和cout速度大幅度增加: #include <iostream> int main() {ios::sync_with_stdio(fals ...
- printf()详解
1.printf()简介 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出.标准输出,即标准输出文件,对应终端的屏幕.printf()申明于头文件stdio.h. 函数原型: ...
- 取代C语言的标准输入输出:cin 和 cout【C++标准输入输出】
C 和 C++ 标准输入输出的区别 cin 标准输入 C++解决C cout 标准输入 C 和 C++ 标准输入输出的区别 cin 取代 scanf cout 取代 printf printf 和 s ...
最新文章
- Python 解决写入csv中间隔一行空行问题
- winform datagridview 提高性能。
- jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
- Golang的数组与切片——详解
- NetAug(网络增强)—Dropout的反面
- 牛市该理智还是疯狂?python+BI可视化的股票分析,都是你想看的
- .Net脱壳工具 de4dot参数说明/简易教程
- x264源代码简单分析:熵编码(Entropy Encoding)部分
- how bootstrap fit into our website design?
- 如何批量创建文件夹并命名?
- STC - STC15官方库函数 - 串口操作修改
- 最全面的安卓编码规范
- 只有努力了,你才能成为想要的样子
- 程序员延寿指南-活着才能输出
- win10电脑亮度调节失灵(win10电脑亮度调节失灵戴尔)
- dma子系统 dmac
- 使用八种牛云存储解决方案ios7.1的app部署问题
- AWS Key Management Service(KMS)
- Paper Note - 基于高效数据流标记和跟踪的可精炼跨主机攻击调查
- java对接海康威视SDk实现红外DL/T抓图
热门文章
- 1053 Path of Equal Weight
- Java接口(interface)的概念及使用
- 知识图谱实践篇(二):关系数据库到RDF
- 肖仰华:知识图谱与认知智能
- Google Archive Patch 源码解析
- python内存管理说法错误_python面试题总结1-内存管理机制
- vb6 打印选项对话框_办公必备技能,Word打印问题及解决方案全在这,轻松解决打印难题...
- 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成
- AtCoder AGC037E Reversing and Concatenating
- Codechef TRIPS Children Trips (分块、倍增)