std :: cout将不会打印
当std::cout << "hello"
不起作用时,是否有任何情况? 我有ac / c + +代码,但std::cout
不打印任何东西,甚至不是常量string(如“你好”)。
有没有办法检查cout
是否能够打开stream? 有一些成员函数,如good()
, bad()
,…但我不知道哪一个适合我。
确保你刷新了stream。 这是必需的,因为输出stream是缓冲的,你不能保证缓冲区何时被刷新,除非你自己手动刷新它。
std::cout << "Hello" << std::endl;
std::endl
将输出一个换行符并刷新stream。 或者, std::flush
只会执行flush操作。 刷新也可以使用stream的成员函数完成:
std::cout.flush();
std::cout
很可能是因为缓冲(你正在写的东西在std::cout
的缓冲区中而不是在输出中)。
你可以做这些事情之一:
-
直接刷新
std::cout
:std::cout << "test" << std::flush; // std::flush is in <iostream>
std::cout << "test"; std::cout.flush(); // explicitly flush here
std::cout << "test" << std::endl; // endl sends newline char(s) and then flushes
-
改用
std::cerr
。std::cerr
没有被缓冲,但它使用了不同的stream(即如果你对“在控制台上看到消息”感兴趣的话,第二种解决scheme可能不适合你)。
要有效地禁用缓冲,你可以调用这个:
std::setvbuf(stdout, NULL, _IONBF, 0);
或者,您可以调用您的程序并在命令行中禁用输出缓冲:
stdbuf -o 0 ./yourprogram --yourargs
请记住,这通常不是出于性能原因。