Перечисление (или enum) в C

Здравствуйте,野心勃勃 программисты! Сегодня мы окунемся в чудесный мир перечислений в C. Как ваш доброжелательный соседний преподаватель информатики, я рад помочь вам в этом путешествии. Так что возьмите любимый напиток, устроитесь поудобнее, и давайте отправимся в это приключение вместе!

C - Enumeration (or enum)

Что такое Перечисление (или enum) в C?

Представьте, что вы организовываете свой шкаф. Вы можете разделить свои вещи на разные типы: рубашки, брюки, платья и так далее. В программировании на языке C, перечисление (или enum для краткости) похоже на создание собственной категории для вашего кода. Это способ определить группу.named констант, делая ваш код более читаемым и структурированным.

Давайте начнем с простого примера:

enum Days {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};

В этом примере мы создали enum под названием Days. Each элемент в enum (MONDAY, TUESDAY и т.д.) называется перечисляемым. По умолчанию C присваивает целочисленные значения этим перечисляемым, начиная с 0. Так что MONDAY это 0, TUESDAY это 1 и так далее.

Определение и декларация типа enum

Теперь, когда мы понимаем, что такое enum, давайте посмотрим, как его определить и объявить:

enum Fruits {
APPLE,
BANANA,
ORANGE,
MANGO
};

int main() {
enum Fruits favorite = MANGO;
printf("My favorite fruit is number %d\n", favorite);
return 0;
}

В этом примере мы определили enum под названием Fruits. Затем, в функции main, мы объявили переменную favorite типа enum Fruits и присвоили ей значение MANGO. Когда мы выводим favorite, он будет выводить 3, потому что MANGO является четвертым элементом в нашем enum (не забудьте, что мы начинаем отсчет с 0).

Декларация переменных enum

Существует несколько способов декларации переменных enum. Давайте рассмотрим их:

enum Colors {RED, GREEN, BLUE};

// Метод 1: Декларировать переменную separately
enum Colors paint;
paint = GREEN;

// Метод 2: Декларировать и инициализировать в одной строке
enum Colors sky = BLUE;

// Метод 3: Использовать typedef для удобства
typedef enum {CIRCLE, SQUARE, TRIANGLE} Shape;
Shape myShape = TRIANGLE;

Каждый из этих методов достигает одной и той же цели: создание переменной типа enum. Выберите тот, который вам удобнее!

Изменение значений констант enum

По умолчанию константы enum присваиваются увеличивающиеся целочисленные значения, начиная с 0. Но что, если мы хотим изменить эти значения? Хорошая новость! Мы можем это сделать:

enum Months {
JAN = 1,
FEB,
MAR,
APR = 100,
MAY,
JUN
};

В этом примере JAN явно установлен в 1, поэтому FEB будет 2, а MAR будет 3. Затем APR установлен в 100, поэтому MAY будет 101, а JUN будет 102.

Использование enum в операторах switch

Enums особенно полезны в операторах switch. Они делают ваш код более читаемым и менее ошибочным. Давайте рассмотрим пример:

enum Weekday {MON, TUE, WED, THU, FRI};

enum Weekday today = WED;

switch(today) {
case MON:
printf("It's Monday. Time to start the week!\n");
break;
case TUE:
printf("It's Tuesday. Keep the momentum going!\n");
break;
case WED:
printf("It's Wednesday. Halfway there!\n");
break;
case THU:
printf("It's Thursday. The weekend is almost here!\n");
break;
case FRI:
printf("It's Friday. Time to celebrate!\n");
break;
default:
printf("It's the weekend! Enjoy!\n");
}

Этот оператор switch гораздо clearer, чем если бы мы использовали целочисленные значения. Immediately显而易но, что представляет собой каждый случай.

Примеры типа enum

Давайте рассмотрим еще несколько примеров для巩固ления нашего понимания:

Пример 1: Сигналы светофора

enum TrafficLight {
RED,
YELLOW,
GREEN
};

enum TrafficLight light = YELLOW;

if (light == RED) {
printf("Stop!\n");
} else if (light == YELLOW) {
printf("Prepare to stop.\n");
} else if (light == GREEN) {
printf("Go!\n");
}

Пример 2: Игровые карты

enum Suit {HEARTS, DIAMONDS, CLUBS, SPADES};
enum Rank {ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};

struct Card {
enum Suit suit;
enum Rank rank;
};

struct Card myCard = {HEARTS, QUEEN};

printf("My card is the %d of %d\n", myCard.rank, myCard.suit);

Применения enum

Enums имеют множество практических применений в программировании. Вот несколько из них:

  1. Механизмы состояний: Enums могут представлять различные состояния в системе.
  2. Опции меню: Enums могут использоваться для представления выборов в меню.
  3. Коды ошибок: Разные типы ошибок могут быть представлены как значения enum.
  4. Опции конфигурации: Enums могут представлять различные параметры конфигурации.

Вот таблица, резюмирующая некоторые.common методы enum:

Метод Описание Пример
Декларация Декларировать тип enum enum Colors {RED, GREEN, BLUE};
Создание переменной Создать переменную типа enum enum Colors paint = GREEN;
Присвоение значений Присваивать конкретные значения константам enum enum Months {JAN = 1, FEB, MAR};
Typedef Создать определение типа для enum typedef enum {CIRCLE, SQUARE} Shape;
Использование в switch Использовать enum в операторе switch switch(shape) { case CIRCLE: ... }

И вот и все! Теперь вы знакомы с миром перечислений в C. Помните, что enums ваши друзья. Они помогают сделать ваш код более читаемым, структурированным и менее подверженным ошибкам. По мере продолжения вашего пути в программировании вы найдете множество ситуаций, где enums могут упростить вашу жизнь. Счастливого кодирования и пусть ваши enums всегда будут в порядке!

Credits: Image by storyset