QTextStream stdin读取行未暂停输入

QTextStream stdin readline not pausing for input

本文关键字:暂停 输入 stdin 读取 QTextStream      更新时间:2023-10-16

这里有一个非常简单的应用程序来说明我遇到的问题。

#include <QTextStream>
int main()
{
    QTextStream cin(stdin);
    QTextStream cout(stdout);
    QString test;
    cout << "Enter a value: ";
    cout.flush();
    cin >> test;
    cout << "Enter another value: ";
    cout.flush();
    test = cin.readLine();
    cout << test;
    return 0;
}

我希望执行暂停并等待test = cin.readline();的输入,但它没有。如果我删除cin >> test;,那么它将暂停。

为什么这个代码的行为是这样的?我如何获得我想要的行为?

可能缓冲区仍然有一个cin.readLine();接受的结束线字符'n'-在执行cin.readLine()之前,尝试用cin.flush()刷新它。


此代码正在工作:

QTextStream cin(stdin);
QTextStream cout(stdout);
QString test;
cout << "Enter a value: ";
cout.flush();
cin >> test;
cout << "Enter another value: ";
cout.flush();
cin.skipWhiteSpace(); //Important line!
test = cin.readLine();
cout << test;
return 0;

您只需要在cin.readLine()之前添加cin.skipWhiteSpace(),正如我之前所说的,"\n"字符仍在缓冲区中,该方法正在消除它