Проверьте, не является ли ввод целым или целым числом cpp - PullRequest
0 голосов
/ 04 ноября 2018

Я создал игру с угадыванием, в которой вы должны угадывать случайно сгенерированное число в диапазоне от 1 до 100. Мне также удалось ограничить пользователя, если он вводит число, которое выходит за пределы диапазона и требует нового ввода. Проблема в том, что вы случайно вводите буквы или символы. Затем он входит в бесконечный цикл. Я попробовал:

while(x<1 || x>100 || cin.fail())//1. tried to test if input failed (AFAIU it checks if input is expected type and if it is not it fails)
while(x<1 || x>100 || x>='a' && x<='z' || x>='A' && <='Z') // 2. tried to test for letters at least
while(x<1 || x>100 x!=(int)x)//3. to test if it is not integer
{ cout<<"Out of range";
  cin>>x;
}

1 Ответ

0 голосов
/ 04 ноября 2018

Для одного решения вы можете попробовать использовать isdigit. Это проверяет, является ли ввод фактическим числом. Таким образом, вы можете сделать что-то вроде:

if(!(isdigit(x))){
   cout << "That is not an acceptable entry. \n";
   continue;
}

РЕДАКТИРОВАТЬ: я должен сказать, что после изучения этого, я понял, что для isdigit, чтобы работать, запись должна быть символом. Однако, это все еще может работать, если вы преобразуете char в int после того, как обнаружите, что это int. Пример:

if(!(isdigit(x))){
       cout << "That is not an acceptable entry. \n";
       continue;
}
else{
     int y = x - '0';
}

Это int y = x - '0' может показаться странным; но это происходит потому, что вы должны преобразовать символ в целое число, и в соответствии с кодировкой ASCII, чтобы сделать это, вы вычтите символ «0» из желаемого числа. Вы можете увидеть это здесь: Конвертировать char в int в C и C ++

...