我有以下代码:
int main ()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
for (int i = 0; i < 3; i++) {
cout << i << " ";
printf("%d ", i);
}
cout << endl;
return 0;
}
该代码的预期输出是:
0 0 1 1 2 2
但是,它打印:
0 1 2
0 1 2
这个问题发生在GNU G 4.9.2编译器中
最佳答案
一个可能的解释是cout和printf使用单独的缓冲区.当使用endl命令刷新或者缓冲区已满(通常为512字节)时,终端屏幕上的cout输出.
我不知道printf(如果我错了,可以随时纠正我),但也遵循类似的行为.那么会发生什么,在程序结束时,这两个缓冲区被刷新,所以你看到的输出是实现的.
我在我的机器上运行代码(GCC 4.8.1)以及下面的修改
cout << i << " . ";
printf("%d ", i);
我观察到的输出为0 1 2 0. 1. 2.这似乎表明printf首先在我的情况下刷新.我不知道它是按设计(在标准中的某个地方),还是取决于上下文.
相关文章
转载注明原文:c++ 为什么这个使用printf和cout的代码没有预期的输出? - 代码日志