Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //========ВАРИАНТ 1Й: ИНИЦИАЛИЗАЦИЯ ПЕРЕЧИСЛЕНИЯ В ОБХОД ПРОВЕРОК ТИПОБЕЗОПАСНОСТИ=====================//
- enum t_year { y1995 = 1995, y1996, y1997, y1998, y1999 };
- // ...бла-бла-бла..
- // ...некое заполнение структуры...
- // место ввода года рождения: (в какой-то функции, скорее всего)
- int year = 0; // переменная для года рождения, пока - интовая
- std::cin >> year; // ввод года рождения, пусть вводит что хочет - проверим позже
- if( year > 1994 && year < 2000 ){ // та самая проверка на валидность
- t_year yofb{year}; // создаем переменную перечисления, и инициализируем валидным числом
- student.year_of_birth = yofb; // спокойно копируем получивщуюся переменную перечисления в структуру
- } else std::cout << "Недопустимый год рождения!" << std::endl;
- //========ВАРИАНТ 2Й: СЛОВАРЬ========================================================================//
- // ПРИМ: данный подход менее элегантный, но зато работатет на старых компиляторах - предыдущий скопытится, если компиль старше 17 года
- #include <stdlib.h> // нужно для функции abs() (математический модуль) //
- enum t_year { y1995 = 1995, y1996, y1997, y1998, y1999 };
- // ...бла-бла-бла.. какой-то другой код, объявление структуры студента и так далее...
- //словарь - массив значений нужного типа - мы будем пользоваться его индексами как ссылками на значения
- //----------------------0------1------2------3------4---
- t_year dictionary = { y1995, y1996, y1997, y1998, y1999 };
- // ...бла-бла-бла.. ------------------------------------
- // место ввода года рождения:
- int option = 0; // сюда запишем, что ввел пользователь
- std::cout << "Введите год рождения: "; cin >> option; // тут все понятно - ввели подсказку, ввели значение
- if( year > 1994 && year < 2000 ){ // проверка все равно нужна, на случай, пользователь напишет 2000+ год, или 1900-
- // берем из словаря нужный элемент из словаря. пример: если пользователь введёт 1995й, //
- // то последняя цифра будет 5, и по формуле: abs(5 - 5) = 0, что есть индекс элемента перечисления "y1995" в словаре //
- // та же фигня с большими годами - к примеру, 1999 даст на выходе abs( 5 - 9 ) = abs( -4 ) = 4, //
- // что есть индекс нужного года нужного типа. Формулу можешь придумать свою, //
- // главное - установить однозначное соответствие [цифра выбора -> константа года] //
- student.year_of_birth = dictionary[ abs(5 - option % 10) ];
- } else std::cout << "Недопустимый год рождения!" << std::endl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement