QTextStream stdin readline не останавливается для ввода

Вот очень простое приложение, чтобы проиллюстрировать мою проблему.

#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; затем он останавливается

Почему этот код ведет себя так, и как мне получить поведение, которое я хочу?

1

Решение

Возможно, буфер все еще имеет символ конца строки '\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’ все еще находится в буфере, и этот метод избавляется от него.

4

Другие решения


По вопросам рекламы [email protected]