то, что делает cin.clear () - очищает флаги ошибок потока cin. Когда это происходит, операции потока cin могут продолжаться. Следующая строка извлекает символ из потока и возвращает его.
Чтобы понять, что делает цикл, рассмотрим следующий случай:
Предположим, что массив имеет тип int, и вы вводите: abc и затем нажимаете ввод.
cin указывает, что строковый ввод не может войти в массив int. и поэтому он возвращает false и устанавливает флаг ошибки. Когда вы выполняете cin.clear (), он сбрасывает флаги ошибки, чтобы можно было продолжить дальнейшие операции (cin.get () может работать). Теперь cin.get () извлекает поток. поскольку он не равен '\ n', цикл продолжается (второй цикл) до тех пор, пока он не извлечет '\ n' =>, что означает, что введенный вами неверный i / p полностью смыт, и вы можете начать заново