C ++控制台输出问题

时间:2013-08-09 20:00:12

标签: c++ c

#include <iostream>                                                             

using namespace std;

int main()
{
   cout << 1;
   while (true);
   return 0;
}

我认为这个程序应该打印1然后挂起。但它没有打印任何东西,只是挂了。 cout << endlcout.flush()可以解决此问题,但我仍然想知道为什么它没有按预期工作:) 这个问题出现在codeforces比赛期间,我花了很多时间来查看我的程序的奇怪行为。这是不正确的,它也是躲避,隐藏的输出实际上是调试信息。

我尝试使用printf(使用gcc进行编译),它的行为与cout一样,所以这个问题也可以引用到C.

3 个答案:

答案 0 :(得分:8)

您正在写入缓冲区。您需要刷新缓冲区。正如@Guvante所提到的,使用cout.flush()fflush(stdout)作为printf。

<强>更新

看起来fflush实际上与cout一起使用。但是不要这样做 - 在所有情况下都可能不是这样。

答案 1 :(得分:2)

这是因为cout缓冲输出。您必须刷新缓冲区才能实际打印。

endlflush()都执行此刷新。

另请注意,您的程序会挂起,因为您有一个无限循环(while(true);)。

这样做的原因是,如果您要打印大量数据(比如说1000个数字),它可以大大提高效率。此外,大多数次要数据点都以endl结尾,因为您希望输出跨越多行。

答案 2 :(得分:1)

关于printf,与cout相同:您要打印到缓冲区,需要用fflush(stdout);刷新它。终止将刷新缓冲区,这就是为什么你可以看到没有无限循环的输出。

有关详细信息,请参阅Why does printf not flush after the call unless a newline is in the format string?