Итак, я хочу принять два входа, строку и int, а также когда пользователь вводит «конец», чтобы выйти из цикла. Моя проблема заключается в том, что введен «конец», что он застревает в цикле, поскольку (я предполагаю) он ожидает два входа, когда пользователь вводит только один. Я провел некоторое исследование и нашел материал по отбрасыванию ввода и сбросу его с cin.ignore()
и cin.clear()
, однако они, похоже, применяются только при принятии одного входа, где, когда я запрашиваю два отдельных входа в одной строке и он, похоже, не работает. Что делает мой код, в основном запрашивает список вещей (значение имени), сохраняя его в массиве в классе и ограничивая 10 элементов. Таким образом, когда «end» вводится, ему нужно только выйти из цикла while. Все остальное работает нормально, т. Е. Когда я вхожу в 10 элементов, он выходит из цикла, а остальная часть кода выполняется так, как должна. Таким образом, кажется, что проблема возникает при вводе «конца». (p.s. a - строка и b в типе int). Раздел код:Как остановить бесконечный цикл из-за недопустимого ввода C++
do {
cout << "Enter the item and value (enter 'end' to stop): ";
cin >> a >> b;
items1.set_name(a, i);
items1.set_price(b, i);
i++;
} while (i < 10 && a != "end");
Это кажется, что это должно быть очень просто, и мне очень жаль, если его глупый вопрос, но я не могу понять его Хаха. Заранее благодарим меня за помощь.
Какие типы '' Ā' и b'? – Chad
Возможный дубликат [Почему я получаю бесконечный цикл, если я ввожу букву, а не число?] (Http://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop- if-i-enter-a-letter-rather-than-a-number) – Galik
Вы не проверяете состояние потока после ввода. Перед обработкой данных перед началом обработки имейте окончательный '' f (cin) '. –