• Программа выводит информацию о дате рождения.
    Есть класс Date и унаследованный от него Birthday.
    В конструктор класса Birthday нужно передать три значения типа int, для дня, месяца и года соответственно. Если передавать значения вручную прямо из программы - все прекрасно. Но если доверить пользователю самому вводить эти значения с клавиатуры (что логично) и записывать их в какие-либо переменные, а потом передавать значения этих переменных в конструктор - появляется возможность ввода данных любых типов, приводимых к int. Как проверить, что пользователь действительно ввёл с клавиатуры целые числа? И если введены недопустимые значения (Например, буква или же строка, содержащая буквы, и т.д) обработать ошибку с помощью try - catch - throw?


    #include
    #include

    using namespace std;

    class Date
    {
    protected:
    int day, month, year;
    public:
    Date ()
    {
    day = 0;
    month = 0;
    year = 0;
    }

    void info ()
    {
    cout«"day: "«day«endl;
    cout«"month: "«month«endl;
    cout«"year: "«year«endl;
    cout«endl;
    }
    };

    class Birthday : public Date {
    public:
    Birthday (int d_day, int m_month, int y_year){
    day = d_day;
    month = m_month;
    year = y_year;
    }
    };


    int main()
    {

    Birthday Ilya(17,10,1999);
    Birthday Alina(5,2,1999);
    Birthday Angelina(5,2,1999);

    Ilya.info();
    Alina.info();
    Angelina.info();

    return 0;
    }

Ответы 1

  • Так как из-за структуры языка все символы, вводимые для типа int превращаются в 0, то после ввода в main можно проверяться на наличие нуля. Это никак не навредит программе, поскольку в датах не может быть нуля.

    Код

    int main()

    {

     int day = 0, month = 0, year = 0;

     cout << "Ilya (d//m//y): ";

     cin >> day >> month >> year;

     if((day == 0) || (month == 0) || (year == 0)){

         cout << "Вы ввели неверные данные!";

         return 0;

     }

     else{

        // ...

     }

     return 0;

    }

    Проверка

    Ilya (d//m//y): six 3 1999                                                                            

    Вы ввели неверные данные!

    Ilya (d//m//y): ( 8 1954                                                                              

    Вы ввели неверные данные!

  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years