std::cout << "hello"
不起作用有什么情况吗?我有一个c/C++代码,但std::cout
不打印任何东西,甚至不包含常量字符串(如“hello”)。std :: cout将不打印
有没有方法可以检查cout
是否能够打开流?有一些成员功能,如good()
,bad()
,...但我不知道哪一个适合我。
std::cout << "hello"
不起作用有什么情况吗?我有一个c/C++代码,但std::cout
不打印任何东西,甚至不包含常量字符串(如“hello”)。std :: cout将不打印
有没有方法可以检查cout
是否能够打开流?有一些成员功能,如good()
,bad()
,...但我不知道哪一个适合我。
确保你刷新了流。这是必需的,因为输出流是缓冲的,并且您无法保证缓冲区何时被刷新,除非您自己手动刷新它。
std::cout << "Hello" << std::endl;
std::endl
将输出一个换行符并刷新流。或者,std::flush
将只是做的冲洗。
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
未被缓冲,但它使用了不同的流(即如果您对“在控制台上查看消息”感兴趣的话,第二种解决方案可能不适用于您)。
他们都没有在我的代码工作。 – 2016-12-12 18:52:04
为了有效地禁用缓冲您可以拨打此:
std::setvbuf(stdout, NULL, _IONBF, 0);
或者,您也可以打电话给你的程序,并在命令行禁用输出缓冲:
stdbuf -o 0 ./yourprogram --yourargs
请记住,这通常不会因性能原因而完成。
啊,缓冲输出,尽管艺术是一个无情和残酷的丫头。 – WhozCraig 2013-02-13 16:33:16
C中没有'std :: cout'。 – 2013-02-13 17:03:41
在窗口系统中,'std :: cout'可能无法实现,因为有窗口,操作系统不知道要输出到哪个窗口。 – 2013-02-13 20:23:14