c++ 为什么这个使用printf和cout的代码没有预期的输出?

我有以下代码:

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的代码没有预期的输出? - 代码日志