Advertisement
teaowl

C++ Using Enums Example

Nov 17th, 2020 (edited)
964
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.65 KB | None | 0 0
  1. //========ВАРИАНТ 1Й: ИНИЦИАЛИЗАЦИЯ ПЕРЕЧИСЛЕНИЯ В ОБХОД ПРОВЕРОК ТИПОБЕЗОПАСНОСТИ=====================//
  2. enum t_year { y1995 = 1995, y1996, y1997, y1998, y1999 };
  3.  
  4. // ...бла-бла-бла..
  5. // ...некое заполнение структуры...
  6.  
  7. // место ввода года рождения: (в какой-то функции, скорее всего)
  8. int year = 0;                                   // переменная для года рождения, пока - интовая  
  9. std::cin >> year;                               // ввод года рождения, пусть вводит что хочет - проверим позже
  10. if( year > 1994 && year < 2000 ){               // та самая проверка на валидность
  11.     t_year yofb{year};                          // создаем переменную перечисления, и инициализируем валидным числом
  12.     student.year_of_birth = yofb;               // спокойно копируем получивщуюся переменную перечисления в структуру
  13. } else std::cout << "Недопустимый год рождения!" << std::endl;
  14.  
  15.  
  16. //========ВАРИАНТ 2Й: СЛОВАРЬ========================================================================//    
  17. // ПРИМ: данный подход менее элегантный, но зато работатет на старых компиляторах - предыдущий скопытится, если компиль старше 17 года
  18.  
  19. #include <stdlib.h> // нужно для функции abs() (математический модуль) //    
  20.  
  21. enum t_year { y1995 = 1995, y1996, y1997, y1998, y1999 };
  22. // ...бла-бла-бла.. какой-то другой код, объявление структуры студента и так далее...
  23.  
  24. //словарь - массив значений нужного типа - мы будем пользоваться его индексами как ссылками на значения
  25. //----------------------0------1------2------3------4---
  26. t_year dictionary = { y1995, y1996, y1997, y1998, y1999 };
  27. // ...бла-бла-бла.. ------------------------------------
  28.  
  29. // место ввода года рождения:
  30. int option = 0;                                         // сюда запишем, что ввел пользователь
  31. std::cout << "Введите год рождения: "; cin >> option; // тут все понятно - ввели подсказку, ввели значение   
  32. if( year > 1994 && year < 2000 ){                       // проверка все равно нужна, на случай, пользователь напишет 2000+ год, или 1900-
  33.     // берем из словаря нужный элемент из словаря. пример: если пользователь введёт 1995й,                                 //
  34.     // то последняя цифра будет 5, и по формуле: abs(5 - 5) = 0, что есть индекс элемента перечисления "y1995" в словаре    //
  35.     // та же фигня с большими годами - к примеру, 1999 даст на выходе abs( 5 - 9 ) = abs( -4 ) = 4,                         //
  36.     // что есть индекс нужного года нужного типа. Формулу можешь придумать свою,                                           //
  37.     // главное - установить однозначное соответствие [цифра выбора -> константа года]                                       //
  38.     student.year_of_birth = dictionary[ abs(5 - option % 10) ];
  39. } else std::cout << "Недопустимый год рождения!" << std::endl;
  40.  
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement