Jos*_*eld 40
确保冲洗流.这是必需的,因为输出流是缓冲的,除非您自己手动刷新,否则无法保证何时刷新缓冲区.
std::cout << "Hello" << std::endl;
Run Code Online (Sandbox Code Playgroud)
std::endl将输出换行符并刷新流.另外,std::flush将刚刚做齐平.也可以使用流的成员函数来完成刷新:
std::cout.flush();
Run Code Online (Sandbox Code Playgroud)
小智 11
std::cout 不适用于 GUI 应用程序!
特定于 MS Visual Studio:当您需要控制台应用程序并使用 MS Visual Studio 时,将项目属性“链接器 -> 系统 -> 子系统”设置为控制台。在 Visual Studio 中创建新的 Win32 项目(用于本机 C++ 应用程序)后,此设置默认为“Windows”,以防止 std::cout 将任何输出发送到控制台。
要有效地禁用缓冲,您可以调用它:
std::setvbuf(stdout, NULL, _IONBF, 0);
Run Code Online (Sandbox Code Playgroud)
或者,您可以调用您的程序并在命令行中禁用输出缓冲:
stdbuf -o 0 ./yourprogram --yourargs
Run Code Online (Sandbox Code Playgroud)
请记住,出于性能原因,通常不会这样做。
很可能std::cout由于缓冲而无法工作(您所写的内容最终会在缓冲区中std::cout而不是在输出中).
你可以做以下事情之一:
std::cout明确刷新:
std::cout << "test" << std::flush; // std::flush is in <iostream>
Run Code Online (Sandbox Code Playgroud)
std::cout << "test";
std::cout.flush(); // explicitly flush here
Run Code Online (Sandbox Code Playgroud)
std::cout << "test" << std::endl; // endl sends newline char(s) and then flushes
Run Code Online (Sandbox Code Playgroud)使用std::cerr来代替.std::cerr没有缓冲,但它使用不同的流(即如果您对"在控制台上看到消息"感兴趣,第二个解决方案可能对您不起作用).
| 归档时间: |
|
| 查看次数: |
52111 次 |
| 最近记录: |