Предмет: Информатика, автор: angryfukse

Программа выводит информацию о дате рождения.
Есть класс 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;
}


Аноним: Короче, смешной код.
csharp: Всё можно делать через условия, но в вопросе задаётся другой вопрос.
Аноним: Да ну? Читаем внимательно: "Как проверить, что пользователь действительно ввёл с клавиатуры целые числа? И если введены НЕДОПУСТИМЫЕ значения..."
Аноним: Да, там дальше приведены случаи ввода нечисловых символов, но едь написано НАПРИМЕР, т.е. этим недопустимые значения вовсе не исчерпываются.
Аноним: Скажите, неохота была это все расписывать - я поверю.
csharp: Прочтите пример недопустимых значений.
Аноним: Я написал выше: этим недопустимые значения вовсе не исчерпываются.
Аноним: Для корректной даты недопустимые значения - это довольно много всего.
csharp: Не вижу смысла продолжать спорить, поскольку автор сам написал, какие примеры ему нужно предотвращать.
angryfukse: Предотвратить ввод несуществующих дат я в состоянии) Вопрос был действительно только в том, как предотвратить ввод значений, приводимых к int

Ответы

Автор ответа: csharp
4

Так как из-за структуры языка все символы, вводимые для типа 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                                                                              

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

Похожие вопросы
Предмет: Алгебра, автор: veronikasenk52