1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//clang C++ enum Объявление Листинг #1 enum { //Перечисление объявляется как и структура RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLETTE }; int main(){ } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//clang C++ enum Создание объекта Листинг #2.1 enum { //Перечисление объявляется как и структура RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLETTE } color; //color - объект данного перечисления, можно добавлять новые объекты через запятую int main(){ } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//clang C++ enum Создание объекта Листинг #2.2 enum COLOR{ //Перечисление объявляется как и структура, назвали перечисление COLOR RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLETTE }; int main(){ COLOR color; //color - объект данного перечисления, можно добавлять новые объекты через запятую } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//clang C++ enum Создание объекта Листинг #2.3 enum COLOR{ //Перечисление объявляется как и структура, назвали перечисление COLOR RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLETTE }; int main(){ COLOR::VIOLETTE; //Доступ с помощью :: | Это целое число } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//clang C++ enum Создание объекта Листинг #3 int main(){ enum COLOR{ //Перечисление объявляется как и структура, назвали перечисление COLOR RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLETTE }; COLOR color; //color - объект данного перечисления, можно добавлять новые объекты через запятую color = YELLOW; //В color, как объект перечисления COLOR, можно присваивать любое обозначение, //находящееся внутри COLOR } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//Borland C++3.1 enum Использование enum Листинг #4 #include <conio.h> //Для очистки экрана clrscr() #include <iostream.h> #include <time.h> //для генератора чисел #include <stdlib.h> //для генератора чисел enum bool {false,true}; // Перечислили две константы false и true int main() { clrscr(); srand(time(0)); bool flag; //flag есть переменная типа перечисления bool int x = rand()%10 - 2; //задаём случайные значения int y = rand()%10 - 2; cout << "x == " << x << '\n'; //для наглядности выводим полученное на экран cout << "y == " << y << '\n'; /*Делаем какие-то проверки и устанавливаем flag в true или false*/ if (x - y > 2) { flag = true; } else { flag = false; } /*Что-то делаем, исходя из выполнения или невыполнения условия */ if (flag) { cout << "(" << x << ") - (" << y << ") > " << 2; } else { cout << "(" << x << ") - (" << y << ") <= " << 2; } cin.get(); //для задержки экрана } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// clang C++ enum Использование enum Листинг #5 Вывод значения перечислителя на экран #include <iostream> using namespace std; enum PALETTE_COLOR{ //Перечисление "Палитра цветов" RED, //Красный GREEN, //Зелёный BLUE, //Синий }; int main() { PALETTE_COLOR color; color = RED; //Присвоили в объект перечисления перечислитель "RED" cout << "color == " << color << '\n'; //Вывели значение объектана экран color = GREEN; //Присвоили в объект перечисления перечислитель "GREEN" cout << "color == " << color << '\n'; //Вывели значение объектана экран color = BLUE; //Присвоили в объект перечисления перечислитель "BLUE" cout << "color == " << color << '\n'; //Вывели значение объектана экран cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// clang C++ enum Использование enum Листинг #6 Присваивание enum PALETTE_COLOR{ //Перечисление "Палитра цветов" RED, //Красный GREEN, //Зелёный BLUE, //Синий }; int main() { PALETTE_COLOR color; color = GREEN; //OK color = 1; //ОШИБКА! } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//// clang C++ enum Использование enum Листинг #7 Для перечислений разрешено только присваивание enum PALETTE_COLOR{ //Перечисление "Палитра цветов" RED, //Красный GREEN, //Зелёный BLUE, //Синий }; int main() { PALETTE_COLOR color; color = GREEN; //OK color++; //ОШИБКА! Для перечислений Не предусмотрено color = GREEN + BLUE; //GREEN + BLUE дают целое int, а int не может затесаться в тип PALETTE_COLOR } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//// clang C++ enum Использование enum Листинг #7 Для перечислений разрешено только присваивание enum PALETTE_COLOR{ //Перечисление "Палитра цветов" RED, //Красный GREEN, //Зелёный BLUE, //Синий }; int main() { PALETTE_COLOR color; color = BLUE; //OK color++; //Получается целое 4, а вперечислении только 0..3 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//// clang C++ enum Использование enum Листинг #8 Перечисления и присваивания enum PALETTE_COLOR{ //Перечисление "Палитра цветов" RED, //Красный GREEN, //Зелёный BLUE, //Синий }; int main() { PALETTE_COLOR color; color = BLUE; //OK int i = BLUE; //OK, потому что перечислитель "BLUE" целое число, в int можно целое double d = BLUE; //OK, потому что перечислитель "BLUE" целое число, в double можно целое color = i; //ОШИБКА color - объект перечисления как объект класса, и он не умеет принимать в себя int } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//// clang C++ enum Использование enum Листинг #9 Перечисления и присваивания enum PALETTE_COLOR{ //Перечисление "Палитра цветов" RED, //Красный GREEN, //Зелёный BLUE, //Синий }; int main() { PALETTE_COLOR color; color = PALETTE_COLOR(100); //OK, но 100 не должно быть в объекте, UB cout << color << '\n'; color = PALETTE_COLOR(2); //OK. Разрешённое присваивание } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Шутливая программа: с кем сегодня играть (с кошкой или собакой) #include <iostream> #include <random> #include <ctime> using namespace std; //// clang C++11 enum Использование enum Листинг #10.1 enum { CAT, DOG, NOBODY }; //Имени у перечисления нет, есть только перечислители int main() { random_device rd; // генератор случайных значений mt19937 gen(rd()); gen.seed (time (0)); uniform_int_distribution<> dist(CAT,NOBODY); //левый и последний элемент перечисления int x = 100; switch (x = dist(gen)){ //Выбрали с кем играть case CAT: cout << "PLAY with CAT\n"; break; case DOG: cout << "PLAY with DOG\n"; break; case NOBODY: cout << "NO PLAY\n"; break; default: cout << x << " HA_HA_HA\n"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//Шутливая программа: с кем сегодня играть (с кошкой или собакой) #include <iostream> #include <cstdlib> #include <ctime> using namespace std; //// clang C++11 enum Использование enum Листинг #10.2 enum { CAT, DOG, NOBODY }; //Имени у перечисления нет, есть только перечислители int main() { srand(time(0)); int result = rand() % NOBODY; //CAT и NOBODY - обычные целые числа, 0 и 2, соответственно result = rand() % (NOBODY + 1); //rand() % (2 + 1) ==> rand() % 3; (3 значения: 0,1,2) switch (result){ //Выбрали с кем играть case CAT: cout << "PLAY with CAT\n"; break; case DOG: cout << "PLAY with DOG\n"; break; case NOBODY: cout << "NO PLAY\n"; break; default: cout << result << " HA_HA_HA\n"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; //// clang C++11 enum Использование enum Листинг #11.1 Значения перечислителей enum { CAT = 100, DOG, NOBODY }; //Имени у перечисления нет, есть только перечислители int main() { cout << "CAT == " << CAT << '\n'; //100 cout << "DOG == " << DOG << '\n'; //101 cout << "NOBODY == " << NOBODY << '\n'; //102 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> using namespace std; //// clang C++11 enum Использование enum Листинг #11.2 Значения перечислителей enum { ONE = 1, TWO = 2, FIVE = 5, TEN = 10 }; int main() { cout << "ONE == " << ONE << '\n'; //1 cout << "TWO == " << TWO << '\n'; //2 cout << "FIVE == " << FIVE << '\n'; //5 cout << "TEN == " << TEN << '\n'; //10 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> using namespace std; //// clang C++11 enum Использование enum Листинг #11.3 Значения перечислителей enum { ONE = 1, TWO = 2, FIVE = 5, SIX, SEVEN, TEN = 10 }; int main() { cout << "ONE == " << ONE << '\n'; //1 cout << "TWO == " << TWO << '\n'; //2 cout << "FIVE == " << FIVE << '\n'; //5 cout << "SIX == " << SIX << '\n'; //6 cout << "SEVEN == " << SEVEN << '\n'; //7 cout << "TEN == " << TEN << '\n'; //10 } |
1 |
enum {zero = 0, null = 0, one, odin = 1}; //Разрешается |
1 |
enum bigstep{first, second = 100, third}; //НИЖЕ ОПИСЫВАЕТСЯ ПО ЭТОМУ ПЕРЕЧИСЛЕНИЮ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <iostream> #include <string> #include <cstring> using namespace std; //// clang C++11 enum Использование enum Листинг #12 Использование enum enum ITS_WORD{ NO, YES, START, FINISH }; //Создаём перечисление и называем его для создания от него объекта int main() { string S{"HELLO, I'm is string!!!"}; //Выделим слова из строки const char* const SEPARATOR {"!, \'\n\r"}; //Символы-разделители bool x; //Переменная, чтобы каждый разделитель не влиял на подсчёт слова: //благодаря введению учитывающей переменной //вся цепочка разделетиелей не будет восприниматься всерьёз unsigned count_word = 0; ITS_WORD isWord; //Создаём объект isWord, тип которому перечисление ITS_WORD for (int i=0; i<S.length(); i++){ //Обходим строку if (!strchr(SEPARATOR,S[i])) { //Если символ не разделитель isWord = YES; //то мы идём по слову } else { //в противном случае isWord = NO; //мы идём по разделителям } /*Исходя из того, по чему идём, действуем*/ if (isWord == YES){ x = false; //Обозначаем, что вышли на слово } else if (isWord == NO){ if (!x) { count_word++; x = true; //Обозначаем, что встали на разделительную дорогу } } } cout << S << '\n'; cout << "count word in S: == " << count_word << '\n'; //Выводим результат подсчёта } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
//Borland C++3.1 Программа проверки школьника на сложение целых натуральных чисел. Листинг #13.1 #include <iostream.h> #include <time.h> #include <conio.h> #include <stdlib.h> int main(){ clrscr(); srand(time(0)); enum bool{ false, true} correct; ; unsigned x; //Переменные для сложения unsigned y; unsigned result; const unsigned char N = 10; //Количество попыток unsigned ball = 0; //Общий балл for (unsigned i = 0; i < N; i++){ cout << '\n'; x = rand() % 10; //Выбираем случпйные числа y = rand() % 10; cout << "x == " << x << '\n'; //Выводим складываемые числа на экран для красоты cout << "y == " << y << '\n'; cout << "x+y == "; //Задаём вопрос cin >> result; //Получаем ответ correct = !(result - (x + y)); //Проверяем ответ и в зависимости от правильности или неправильности //выбираем значение перечислителю if (checked) { ball++; //Если ответ правильный, увеличиваем счётчик баллов } } result = ball / N * 100; //Считаем процент успешных ответов /*В зависимости от диапазон успешности, выбираем, какие итоги сообщаем*/ if (result >= 0 && result < 25) { cout << "\n\nBall = 2" << '\n'; } else if (result >= 25 && result <=50){ cout << "\n\nBall = 3" << '\n'; } else if (result >=50 && result <=75){ cout << "\n\nBall = 4" << '\n'; } else if (result >=75 && result <=100){ cout << "\n\nBall = 5"; } cin.get(); cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
//Borland C++3.1 Программа проверки школьника на сложение целых натуральных чисел. Листинг #13.2 #include <iostream.h> #include <time.h> #include <conio.h> #include <stdlib.h> #include <math.h> /*ФУНКЦИЯ ПОДВЕДЕНИЯ ИТОГОВ И ВЫСТАВЛЕНИЯ ОЦЕНКИ*/ unsigned summarizing(const unsigned rating){ if (rating < 25) return 2; if (rating < 50) return 3; if (rating < 95) return 4; if (rating <= 100) return 5; return 0; } int main(){ clrscr(); srand(time(0)); enum bool{ NO, YES} correct; //Признак правильности ответа enum Operation{ SUM, DIF, MULT, DIV} operation; //Набор действий (сложение, вычитание, умножение и деление) double x; //Переменные выполнения действий над ними double y; double result; //Переменная для считывания предполагаемого ответа double answer; //Правильный ответ const unsigned char N = 15; //Количество попыток unsigned ball = 0; //Общий балл char ch; //Для лучшей удобочитаемости, символ знака double rating; //Рейтинг успешных ответов в процентах for (unsigned i=0; i<N; i++){ x = rand() % 10; //Случайно подбираем числа y = rand() % 10; /////////////////////////////////// operation = Operation (rand() % (DIV + 1)); //Случайный выбор операции из перечисления if (operation == DIV && y == 0) operation = SUM; //Для того, чтобы не подбирало вариант деления на 0 /*ИСПОЛЬЗУЕМ КРАСОТУ enum*/ switch (operation){ //Результат вычисления напрямую зависит от выпавшего действия case SUM: ch = '+'; answer = x + y; break; case DIF: ch = '-'; answer = x - y; break; case MULT: ch = '*'; answer = x * y; break; case DIV: ch = '/'; answer = x / y; break; default: cout << "error\n"; //если вдруг выпадет не из набора перечислителей, то это ошибка в принципе //можно что-то обощить, написать, сказать... cin.get(); return 0; //При ошибке выходим } /*Диалог с пользователем, показываем значения переменных и нужное действие над ними, спрашиваем ответ*/ cout << "x == " << x << ", y == " << y << '\t'; cout << "\tx " << ch << " y" << " == "; cin >> result; //считываем наш ответ с клавиатуры /*ПРВЕРКА ПРАВИЛЬНОСТИ ОТВЕТОВ*/ switch (operation){ case DIV: //Проверка деления имеет небольшую особенность, проверяем отдельно if (fabs(result - answer) < 0.003){ correct = YES; } else { correct = NO; cout << "(" << answer <<")"; } break; default: //Со сложением, вычитанием и умножением всё проще if (result == answer) { correct = YES; } else { correct = NO; cout << "(" << answer <<")"; } } if (correct) ball++; //Если ответ был верен, наращиваем счётчик баллов cout << "\n\n"; /////////////////////////////////// } rating = (double) ball / N * 100; //считаем процент успешных ответов cout << "You have been rated: " << summarizing(rating); //подводим итоги и выводим оценку на экран cin.get(); cin.get(); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//clang C++ Пример использования перечисления в коде Листинг #14.1 #include <iostream> using namespace std; enum Month{January, February, March, April, May, June, July, August, September, October, November, December}; //Перечисление /*Проверка введённого целого числа на правильность отношения к номеру месяца*/ bool correct_month(const Month& month, const int value){ if (value >= Month::January && value <= Month::December) return true; return false; } int main(){ Month month; int value; cout << "input month: "; cin >> value; while (!correct_month(month,value-1)){ //вводим номер месяца, пока номер месяца не будет введён верно cout << "input error\n" << "\ninput month: "; cin >> value; }; month = Month(value); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//clang C++ Пример использования перечисления в коде Листинг #14.2 #include <iostream> #include <windows.h> #include <locale> using namespace std; enum Month{January, February, March, April, May, June, July, August, September, October, November, December}; //Перечисление /*ФУНКЦИЯ ПРОВЕРЯЕТ ДОПУСТИМОСТЬ ЧИСЛЕННОГО ЗНАЧЕНИЯ ДЛЯ ПЕРЕЧИСЛЕНИЯ*/ Month int_to_month (const int x) { if (x < int (Month::January) || int (Month::December) < x) cerr << x << " неправильный месяц\n" ; return Month (x) ; } int main(){ setlocale(LC_ALL,""); Month month; month = int_to_month(27 - 1); //Сообщение об ошибке (в month записано неправильное значение) month = int_to_month(12 - 1); //OK (в month записано правильное значение) } |
Использованные материалы:
Правильней будет
Тогда false==0, true==1
Да, если в привычном понимании булевых функций, то это правильнее. И вообще так правильнее, чтобы другим было понятно.
С другой стороны — всё это условности, и ничто не мешать делать что-то для себя своим манером. Главное понимать механизм.
Мне прислали вот это:» E-NUM оповещает вас об успешной аутентификации.»
Что это значит, как мне этим пользоваться. Только без терминов если можно. Мне 70 лет я уже не успел их освоить, мне пользоваться как? С уважением.
это сообщение к программированию не относится.
к примеру есть интернет кошельки, на которых хранят реальные деньги. Вот сервис E-num — это их служба.
это служба, которая предполагает защиту от воровства паролей (авторизация только по мобильному телефону, например)
сами по себе они вам ничего не высылают. Если вы где-то регистрируетесь, то может быть так, что сервис, в котором вы зарегестрировались использует эту службу, сервис E-Num, тогда они во время регистрации заставляют заполнять поля, нужные этой службе безопасности.
Откину, кошельки, заменю их почтовым ящиком.
Вы зарегистрировали почтовый ящик, во время регистрации поставили галочку «использовать E-NUM», после регистрации, например, при каждом входе кроме логина и пароля будет запрашиваться номер телефона, на номер телефона приходить СМС с каки-то там кодом, который надо ввести в соответствующее место на странице входа. Ввели правильно — вход выпонится и вам приходит сообщение об успешной аутентификации. (типа все в порядке, мы убедились, что это вы, а не злоумышленник)
==========================
Но есть вероятность того, что вам приходит сообщение от злоумышленников. Если видите в сообщении текст, требующий отправки смс — просто игнорируйте такие сообщения. — это мошенники.
http://enum.ru/
27 строка последнего примера — забыли перенос, поэтому закомментили нужный кусок кода…
выведед только первый элемент массива, для вывода всех значений либо изменить вот это i<1 на i<2, либо использовать i<=1
flag = 0;
странно, приводить к типу boolean не нужно?
flag = boolean(0);
int не приводится автоматом к enum
Подскажите, как вывести перечисление в виде string?
enum A
{
one,
two,
three
};
void main(){
A numbers;
std::cout << std::to_string(numbers( 2 )); // должно вывести «tree»
}
1. to_string не преобразует цифры в их строковые названия. Поэтому строки как слова Вы не увидите.
2. Вы вызываете функцию number, отдавая один аргумент, цифру 2. Функции этой вообще нет. Объект перечисления при этом не используется вообще.
3. Как вариант, можно использовать конструктор перечисления A, но для этого может быть нужно использовать название перечисления, но не объекта.
При этом есть вероятность, что оно Вам вообще не надо, потому что сделать можно вот так: