Вот очень простое приложение, чтобы проиллюстрировать мою проблему.
#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;
затем он останавливается
Почему этот код ведет себя так, и как мне получить поведение, которое я хочу?
Возможно, буфер все еще имеет символ конца строки '\n'
что принято cin.readLine();
— попробуйте промыть его cin.flush()
перед выполнением cin.readLine ().
Этот код работает:
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’ все еще находится в буфере, и этот метод избавляется от него.