Предположим, что мы пытаемся прочитать целое число, используя std::cin
, и определить, вводит ли пользователь вместо этого строку:
Если пользователь вводит строку, исключение будет не (поэтому ваш код не работает должным образом). Вместо этого ввод останется в буфере, а cin
будет в состоянии ошибки. Следующая cin >>
будет считывать то же значение из буфера в бесконечном цикле, если только вы не очистите состояние ошибки и буфер перед следующей итерацией.
См. эту статью , которая объясняет, как именно читать целое число (и что происходит, когда вместо нее вводится строка), а также как очистить состояние ошибки и буфер.