Игнорировать ввод пользователя за пределами того, что должно быть выбрано из
У меня есть программа, в которой пользователь должен сделать выбор, введя число 1-5. Как бы я справился с любыми ошибками, которые могут возникнуть, если они введут цифру за пределами этих границ или даже символ?
Изменить: Извините, я забыл упомянуть, что это будет в C++
1 ответ
Будьте осторожны с этим. Следующее создаст бесконечный цикл, если пользователь вводит букву:
int main(int argc, char* argv[])
{
int i=0;
do {
std::cout << "Input a number, 1-5: ";
std::cin >> i;
} while (i <1 || i > 5);
return 0;
}
Проблема в том, что std::cin >> i
не будет ничего удалять из входного потока, если это не число. Поэтому, когда он зацикливается и вызывает std::cin>>i
во второй раз он читает то же самое, что и раньше, и никогда не дает пользователю возможности ввести что-либо полезное.
Поэтому безопаснее всего сначала прочитать строку, а затем проверить наличие числового ввода:
int main(int argc, char* argv[])
{
int i=0;
std::string s;
do {
std::cout << "Input a number, 1-5: ";
std::cin >> s;
i = atoi(s.c_str());
} while (i <1 || i > 5);
return 0;
}
Возможно, вы захотите использовать что-то более безопасное, чем atoi
хоть.