【发布时间】:2015-06-21 19:57:38
【问题描述】:
我有以下代码:
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 编译器中
【问题讨论】:
-
@KerrekSB 就是这样,我不想从你那里窃取答案。 printf 和 cout 使用在不同时间刷新的单独缓冲区。在上述代码的情况下,cout 很可能在行中被刷新,而 printf 在调用结束时被刷新。将 printf 中的空格替换为其他内容 (_),您会看到它。
-
添加
fflush(stdout)? -
这个问题没有多大意义;与 stdio 显式取消同步标准流后,您会问为什么它们的行为就好像它们已取消同步?
-
@T.C.如果您确切地知道发生了什么,这个问题就没有多大意义,我的意思是,对
ios_base::sync_with_stdio(false)的调用实际上做了什么。也许这条线只是为了提高使用 cin/cout 的 I/O 操作的性能 -
你自己关掉了同步,问他们为什么不同步%)
标签: c++ compilation output