我有以下代码:
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
使用单独的缓冲区。使用cout
命令刷新它时,或者如果缓冲区已满(通常为512字节),则endl
在终端屏幕上输出。
我不确定printf
(如果我输入错了,请随时纠正我),但是它也遵循类似的行为。因此发生的是,在程序结束时,两个缓冲区均被刷新,因此可以看到您看到的输出。
我在机器上运行了代码(GCC 4.8.1),并进行了如下修改
cout << i << " . ";
printf("%d ", i);
我观察到的输出是
0 1 2 0 . 1 . 2 .
,这似乎表明在我的情况下printf首先刷新。我不知道它是设计使然(在标准中提到)还是取决于上下文。