HatunaLM
@HatunaLM

Как выдавать ошибку при вводе не чисел?

Всем привет.

Послушала я про то, что необходимо портфолио и решила что-то придумать (мои программы не перевернут этот мир, но с чего-то необходимо начинать).

Так вот, решила я сделать программку, в которой пользователь должен ввести число и при любом раскладе он не выиграет. Необходимо ему ввести число от 1 до 10 включительно (только целочисленные значения). Если пользователь вводит число целочисленное, не входящее в указанный промежуток, то программа сообщает ему об ошибке и просит ввести число, отвечающее требованиям. Здесь все хорошо, но трудности у меня возникли с тем, что если пользователь введет вещественное число либо букву/символ (в общем все, что не является целочисленным числом), то цикл просто начинает бесконечно прокручиваться.

Сам код:

#include <iostream>
#include <string>
#include <time.h>
#include <cctype> 

using namespace std;

int main()
{
  srand(time(NULL));
  
  int a;
  const int SIZE = 10;
  
  int isdigit( int a );
  
  int arr[SIZE];
  
  cout<<"Input number from 1 to 10:\t";
  
  cin>>a;
  
  
  while (isdigit(0))
  
 
    {cout<<"Error!!! Please input number from 1 to 10!"<<endl<<endl;
    cout<<"Input number from 1 to 10:\t";
    cin>>a;   }
    
      
  
 while (a<1 ||a>10)
  { cout<<"\nError!!! Please input number from 1 to 10!"<<endl<<endl;
    cout<<"Input number from 1 to 10:\t";
  cin>>a;}
  
  cout<<"\nYour number is \t"<<a<<endl<<endl; 
  
  for (int i = 0; i<SIZE;)
  
  {
      arr[i] = 1+ rand()%10;
      
      if (a!=arr[i]){
          
          cout<< arr[i]<<"\t";
          i++;         
            }
  else continue;
  }
  
  
  cout<<"\n\nSorry, but you lose :(\n\nTry again, maybe you'll win";
}


Подскажите, пожалуйста, как можно выйти из цикла в случае ввода вещественного числа/символа/буквы и предложить пользователю заново ввести число.

Спасибо!
  • Вопрос задан
  • 878 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Подскажите, пожалуйста
#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;

bool inRange(int value, int a, int b)
{
  return value >= a && value <= b;
}

int main()
{
  string value;
  while(true)
  {
    cout << "Enter value [0, 10]: ";
    getline(cin, value);
    int result = 0;
    try
    {
      result = stoi(value);
      if(inRange(result, 0, 10))
      {
        cout << "Okay Goodbye Good Boy" << endl;
        break;
      }
      throw invalid_argument("Bad Boy!");
    }
    catch (exception& e)
    {
      cout << e.what() << " - try agian!" << endl;
    }
  }
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы