Хотя wcin.clear()
только устанавливает флаги состояния ошибки потока, входной поток должен быть сброшен, например, wcin.ignore(...)
Если вы используете wcin.ignore()
, он будет использовать параметры по умолчанию (см. здесь ): один символ или конец файла условие.
При вводе «aaa» извлекается только «a», остальные остаются на входе, который будет-проверено снова в следующем цикле while.
При вводе с консоли обычно используется клавиша «Ввод», символ которой '\n'
.Это разделитель, который мы должны использовать для сброса ввода:
wcin.ignore(100, '\n');
Обратите внимание, что я написал 100
.Если вы хотите отбросить любое количество символов, вам нужно:
#include <limits>
....
wcin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');