这是一个非常简单的应用程序来说明我遇到的问题。
#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;
,则会暂停。
为什么此代码的行为与此类似,我如何获得我想要的行为?
答案 0 :(得分:4)
缓冲区仍然有 '\n'
接受的结束字符cin.readLine();
- 在执行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.skipWhiteSpace()
之前添加cin.readLine()
,正如我在'\ n'字符仍处于缓冲区之前所说的那样,该方法正在摆脱它。