Остановка бесконечного цикла, когда int = (что-то, что не является целым числом)

Итак, это проблема, с которой я столкнулся с тех пор, как начал программировать (не так давно. Я до сих пор не знаю, почему я начал с C++). Когда у меня есть некоторые целочисленные переменные и пользовательский ввод определяет их, если пользователь вводит что-то отличное от целого числа, программа выходит из себя и запускает бесконечный цикл последней команды, которую ему дали. Я не думаю, что пример кода нужен, но если это так, я могу довольно легко сделать базовый пример.


person h3half    schedule 28.05.2011    source источник
comment
Нам определенно нужен код, чтобы понять, что вы имеете в виду.   -  person MRAB    schedule 28.05.2011
comment
Образец кода? С какой стати кому-то это нужно?   -  person Sean    schedule 28.05.2011
comment
Начать программировать с C++ было лучшим выбором, чем вы думаете сейчас.   -  person Seth Carnegie    schedule 29.05.2011


Ответы (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-запроса или другого ненадежного источника, поэтому в будущем вы можете в конечном итоге беспокоиться об этом...

person Steve Jessop    schedule 28.05.2011

Проверьте это Угадай число - бесконечный цикл при плохом чтении

person George Kastrinis    schedule 28.05.2011

При программировании всегда, и я имею в виду всегда, проверяйте свой ввод.

Проверьте, является ли ввод, который вы получаете, разумным. Что я имею в виду, если вы получаете что-то, что должно быть int, проверьте, так ли это. Преобразуйте его, если это не так.

Если вы получаете строку, проверьте, находится ли она в границах, то есть она слишком длинная, короткая или какая-то еще.

cin

В вашем случае это термин для Google.

person Eduard Thamm    schedule 28.05.2011