控制台输出C++问题
Issue with C++ console output
#include <iostream>
using namespace std;
int main()
{
cout << 1;
while (true);
return 0;
}
我以为这个程序应该打印 1 然后挂起。但它没有打印任何东西,它只是挂起来。 cout << endl
或cout.flush()
可以解决这个问题,但我仍然想知道为什么它没有按预期工作:)这个问题出现在codeforce竞赛期间,我花了很多时间研究我的程序的奇怪行为。这是不正确的,它也驼背,隐藏的输出实际上是调试信息。
我尝试使用printf
(使用 gcc 编译(,它的行为和cout
一样,所以这个问题也可以参考 C。
写入缓冲区。您需要刷新缓冲区。如@Guvante所述,对 printf 使用 cout.flush()
或 fflush(stdout)
。
更新:
看起来fflush
实际上适用于 cout。但不要这样做 - 这可能不是所有情况下的事实。
那是
因为cout
缓冲区输出。您必须刷新缓冲区才能实际打印。
endl
和flush()
都执行此刷新。
另请注意,您的程序挂起是因为您有一个无限循环 ( while(true);
(。
这样做的原因是,如果您要打印大量数据(例如 1000 个数字(,它可以更有效地打印。此外,大多数次要数据点无论如何都以endl
结尾,因为您希望输出跨越多行。
关于printf
,与cout
相同:您正在打印到缓冲区中,您需要用fflush(stdout);
刷新它。终止将刷新缓冲区,这就是为什么您可以在没有无限循环的情况下看到输出的原因。
有关详细信息,请参阅为什么 printf 在调用后不刷新,除非格式字符串中有换行符?。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题