控制台输出在 Qt5 中无法正确显示
Posted
技术标签:
【中文标题】控制台输出在 Qt5 中无法正确显示【英文标题】:Console output not displaying correctly in Qt5 【发布时间】:2020-02-13 20:51:32 【问题描述】:我正在为此学校作业编写分数课程,但无法在输入之前显示控制台消息。 cout 行应该在从控制台读取输入之前显示,但是它仅在我已经在控制台中输入输入之后才会显示。我是 Qt 的新手,所以我不熟悉它是如何工作的。
代码如下:
// one of the requrements is we have to use Qt instead of the standard iostream
int main(void)
QTextStream cout(stdout);
QTextStream cin(stdin);
Fraction f1, f2, add, sub, mul, div;
QString line;
cout << "Enter the numerator and denominator of fraction 1: ";
line = cin.readLine();
// ...
【问题讨论】:
告诉它刷新流。 谢谢,成功了!为什么我需要刷新流?两个流不是分开的吗?我想了解幕后发生的事情。std::cin
和 std::cout
是并列的,但不是 stdin
和 stdout
(afaik),并且绝对不是与 QTextStream
一起使用时
【参考方案1】:
要实际显示文本,需要刷新它。根据细节,刷新可能会在写入换行符时自动完成,显然至少在应用程序写入缓冲区已满时以及文件关闭时。在您的应用程序中,这些都不会发生。所以你必须手动刷新你的cout
,使用`QTextStream::flush()。
“这两个流不是彼此分开的吗?”,没错。您的两个 QTextStream
对象完全不相关,因此您从 your cin
读取无法告诉 your cout
刷新其缓冲区。相关的,请注意iostreams
以及 C stdio 的东西具有特殊机制,导致在从 stdin 读取时刷新 stdout。
至于为什么QTextStream
在每次<<
操作后不刷新,那是为了让输出更有效率。刷新意味着需要进行系统调用,这很慢(与仅在应用程序内将文本从一个地方复制到另一个地方相比)。
无关,我不会将你自己的对象命名为cin
和cout
,因为这势必会与std::cin
和std::cout
混淆。
【讨论】:
感谢您的详尽解释。很有帮助!以上是关于控制台输出在 Qt5 中无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift Playground 无法在助手编辑器中查看控制台输出