Игнорировать ввод пользователя за пределами того, что должно быть выбрано из - PullRequest
1 голос
/ 12 февраля 2011

У меня есть программа, в которой пользователь должен сделать выбор, введя число 1-5.Как бы я справился с любыми ошибками, которые могут возникнуть из-за того, что они вводят цифры вне этих границ или даже символы?

Редактировать: Извините, я забыл упомянуть, что это будет в C ++

1 Ответ

2 голосов
/ 12 февраля 2011

Будьте осторожны с этим. Следующее создаст бесконечный цикл, если пользователь вводит букву:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...