Итак, это проблема, с которой я столкнулся с тех пор, как начал программировать (не так давно. Я до сих пор не знаю, почему я начал с C++). Когда у меня есть некоторые целочисленные переменные и пользовательский ввод определяет их, если пользователь вводит что-то отличное от целого числа, программа выходит из себя и запускает бесконечный цикл последней команды, которую ему дали. Я не думаю, что пример кода нужен, но если это так, я могу довольно легко сделать базовый пример.
Остановка бесконечного цикла, когда int = (что-то, что не является целым числом)
Ответы (3)
Если вы хотите точно знать, в чем была ваша ошибка, нам нужно увидеть ваш код, но обычная идиома выглядит так:
int i;
while (std::cin >> i) {
// do something with the user's input, i
}
if (std::cin.fail()) {
std::cout << "not a number!\n";
}
Если произошел сбой, и вы хотите обойти неверный ввод, чтобы пользователь мог повторить попытку, сначала вызовите cin.clear()
, затем либо cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
, чтобы проигнорировать всю строку, либо std::string s; std::cin >> s;
, чтобы проигнорировать слово, разделенное пробелами.
Имейте в виду, что поскольку во втором случае строка фактически создается в памяти, пользователь может ввести несколько гигабайт без пробела, и программа завершится ошибкой. Обычно это нормально, если ввод осуществляется с терминала, это глупая ошибка пользователя. Это может быть не так хорошо, если ввод осуществляется из HTTP-запроса или другого ненадежного источника, поэтому в будущем вы можете в конечном итоге беспокоиться об этом...
Проверьте это Угадай число - бесконечный цикл при плохом чтении
При программировании всегда, и я имею в виду всегда, проверяйте свой ввод.
Проверьте, является ли ввод, который вы получаете, разумным. Что я имею в виду, если вы получаете что-то, что должно быть int, проверьте, так ли это. Преобразуйте его, если это не так.
Если вы получаете строку, проверьте, находится ли она в границах, то есть она слишком длинная, короткая или какая-то еще.
cin
В вашем случае это термин для Google.