原文地址: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的混用而产生的顺序问题相关推荐

  1. 如何在MFC中使用cout和printf,输出到控制台

    在MFC中使用cout和printf,输出到控制台   在GUI程序中使用printf函数以及cout函数的方法: #include <io.h> #include <fcntl.h ...

  2. C++ nlohmann/json 的主要用法(cout、printf打印,异常try...catch处理)

    文章目录 前言 准备工作 引用头文件: 主要用法: 一.声明与构造 1 纯粹声明 2 内容构造 二.解析与序列化 字符串 解析 序列化 文件:// 比如有文件 c:\rankings.json,其内容 ...

  3. cout 和 printf 性能比较

    今天刷OJ时,有个全排列的题目一直超时,当时是用的cout,然后换成printf果断 ac,因此,拥有执著的求知精神的我试试到底差别有多大. 测试用例是用printf 和 cout 分别输出从0~10 ...

  4. [笔记]cin、cout与scanf、printf的效率差异对比分析

    之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...

  5. C++的cin和cout取消同步

    虽然C++有cin函数,但看别人的程序,大多数人都用C的scanf来读入,其实是为了加快读写速度,难道C++还不如C吗!? 其实cin效率之所以低,不是比C低级,是因为先把要输出的东西存入缓冲区,再输 ...

  6. sync_with_stdio和cin.tie(0); cout.tie(0);

    文章目录 sync_with_stdio tie ACM应用 sync_with_stdio 这个函数是一个"是否兼容stdio"的开关,C++为了兼容C,保证程序在使用了std: ...

  7. cin和cout提速

    在主函数main开头加入一下三句,可以让cin和cout速度大幅度增加: #include <iostream> int main() {ios::sync_with_stdio(fals ...

  8. printf()详解

    1.printf()简介 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出.标准输出,即标准输出文件,对应终端的屏幕.printf()申明于头文件stdio.h. 函数原型: ...

  9. 取代C语言的标准输入输出:cin 和 cout【C++标准输入输出】

    C 和 C++ 标准输入输出的区别 cin 标准输入 C++解决C cout 标准输入 C 和 C++ 标准输入输出的区别 cin 取代 scanf cout 取代 printf printf 和 s ...

最新文章

  1. Python 解决写入csv中间隔一行空行问题
  2. winform datagridview 提高性能。
  3. jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
  4. Golang的数组与切片——详解
  5. NetAug(网络增强)—Dropout的反面
  6. 牛市该理智还是疯狂?python+BI可视化的股票分析,都是你想看的
  7. .Net脱壳工具 de4dot参数说明/简易教程
  8. x264源代码简单分析:熵编码(Entropy Encoding)部分
  9. how bootstrap fit into our website design?
  10. 如何批量创建文件夹并命名?
  11. STC - STC15官方库函数 - 串口操作修改
  12. 最全面的安卓编码规范
  13. 只有努力了,你才能成为想要的样子
  14. 程序员延寿指南-活着才能输出
  15. win10电脑亮度调节失灵(win10电脑亮度调节失灵戴尔)
  16. dma子系统 dmac
  17. 使用八种牛云存储解决方案ios7.1的app部署问题
  18. AWS Key Management Service(KMS)
  19. Paper Note - 基于高效数据流标记和跟踪的可精炼跨主机攻击调查
  20. java对接海康威视SDk实现红外DL/T抓图

热门文章

  1. 1053 Path of Equal Weight
  2. Java接口(interface)的概念及使用
  3. 知识图谱实践篇(二):关系数据库到RDF
  4. 肖仰华:知识图谱与认知智能
  5. Google Archive Patch 源码解析
  6. python内存管理说法错误_python面试题总结1-内存管理机制
  7. vb6 打印选项对话框_办公必备技能,Word打印问题及解决方案全在这,轻松解决打印难题...
  8. 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成
  9. AtCoder AGC037E Reversing and Concatenating
  10. Codechef TRIPS Children Trips (分块、倍增)