我有一个相当奇怪的问题,我以前从未遇到过,我不知道是什么导致它。我在Qt 4.7工作,我的项目中有很多东西打印到终端。这些打印都是通过一键按下来触发的。但是,当我按下按钮时,它们并非都打印出来。相反,所有以<< std::endl;
结尾的打印语句都会打印出来,但第一个以"random text...\n";
结尾的打印语句将不打印,之后的任何一个都不会出现,无论它们使用哪种样式。如果我再次点击按钮再次运行整个按钮,它将然后打印剩余的语句,然后是与上次相同的初始输出。我可以把它们全部变成std :: endl,但是它们有很多,所以我真的不愿意。我以前从未见过这样的事情,有没有人对如何解决它有任何建议?谢谢!
编辑:根据请求,这是语法(假设UI上有按钮调用mybutton)
void on_mybutton_pressed()
{
std::cout << "A" << std::endl;
std::cout << "B" << std::endl;
std::cout << "C\n";
}
按下第一次按钮后输出:
A
B
第二次按下后的输出:
C
A
B
答案 0 :(得分:2)
缓冲字符输出。缓冲区在满满时刷新,但通常对于终端你不想等待; std::endl
的特殊之处在于它会立即刷新缓冲区。
答案 1 :(得分:1)
如果您真的想要,可以在程序开头为cout
启用单元缓冲:
std::cout << std::unitbuf;
这将在每次输出操作后刷新缓冲区。
在你的情况下,我认为这有点像黑客而不是解决方案。与刷新相关的性能损失(尽管如果不以高频率打印则无关紧要)。