控制台输出C++问题

Issue with C++ console output

本文关键字:问题 C++ 输出 控制台      更新时间:2023-10-16
#include <iostream>                                                             
using namespace std;
int main()
{
   cout << 1;
   while (true);
   return 0;
}

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

我尝试使用printf(使用 gcc 编译(,它的行为和cout一样,所以这个问题也可以参考 C。

写入缓冲区。您需要刷新缓冲区。如@Guvante所述,对 printf 使用 cout.flush()fflush(stdout)

更新:

看起来fflush实际上适用于 cout。但不要这样做 - 这可能不是所有情况下的事实。

那是

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

endlflush()都执行此刷新。

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

这样做的原因是,如果您要打印大量数据(例如 1000 个数字(,它可以更有效地打印。此外,大多数次要数据点无论如何都以endl结尾,因为您希望输出跨越多行。

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

有关详细信息,请参阅为什么 printf 在调用后不刷新,除非格式字符串中有换行符?。