之前对于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强制清空了缓冲区,将其中的内容输出。

之前对于cout与printf()混用的结果的认识,源于某年北京赛区某judge的总结。据其称,某队在比赛时某题的输出混用了cout与printf(),结果输出的顺序出错。其把原因归结为一个带缓冲而一个不带缓冲。对此金强提出了置疑,因为stdio.h中定义了像ungetc()这样的函数,其作用是将字符放回到输入流中。可见stdio中也是使用了缓冲的。那么为什么cout与printf()混用会发生问
在某题的输出 混用 cout printf (),结果输出的 顺序 出错。 把原因归结为一个带缓冲而一个不带缓冲。 因为stdio.h中定义了像ungetc()这样的函数,其作用是将字符放回到输入流中。可见stdio中也是使用了缓冲的。 那么为什么 cout printf () 混用 会发生 问题 呢?#include <iostream> using namespace std;int main()
1. printf printf 可以输出东西,但是它在一个叫做cstdio,导入cstdio包的方法是:#include<cstdio> 首先,我们要打一个#include<>。记住:括号是<>,不是()。我们在<>这里打一个你想要导入的包,例如:cstdio。所以是:include。接下来,要打主函数和停止程序语句: #include<cstdio> int main(){ return 0; **int main(){}就是主题函
if(a[x][y+1]==0)mk(x,y+1,n); else if(a[x+1][y]==0)mk(x+1,y,n); else if(y>=2&&a[x][y-1]==0)mk(x,y-1,n); else if(x>=2&&a[x-1][y]==0)mk(x-1,y,n); else return;
注:转载自百度文库。如果有侵犯隐私,请与我联系,我马上删除。 参考地址:http://wenku.baidu.com/view/1841b227192e45361066f569.html C++ 中头文件的浅谈! 一 头文件目前有四个函数:setw(int n)//(int n)意思是其中是个整数,以下实例会具体显示;setfill(char '字符');setbase(i