Игнорировать ввод пользователя за пределами того, что должно быть выбрано из

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

Другие вопросы по тегам