Объявление и использование enum
Часть раздела Logic & Flow путешествия по C на Coddy — урок 56 из 63.
Теперь, когда вы определили enum, вы можете создавать переменные этого типа перечисления и присваивать им осмысленные значения. Именно здесь перечисления по-настоящему раскрываются — вместо того чтобы работать с запутанными числами, вы используете описательные имена.
Для объявления переменной перечисляемого типа (enum) используется тот же синтаксис, что и для объявления любой другой переменной:
enum DayOfWeek today;
enum DayOfWeek weekend_day;Затем вы можете присвоить значения этим переменным, используя именованные константы из вашего перечисления:
today = WEDNESDAY;
weekend_day = SATURDAY;Сравните это с использованием обычных чисел: today = 2; и weekend_day = 5;. Версия с перечислением (enum) сразу сообщает вам, с каким днем вы работаете, в то время как числа требуют запоминания того, что представляет каждое значение. Это делает ваш код гораздо более читаемым и менее подверженным ошибкам.
Задание
ЛегкоСоздайте программу на языке C, которая демонстрирует объявление и использование переменных enum для простой системы управления задачами. Ваша программа должна:
- Определить
enumс именемTaskStatusсо следующими константами в указанном порядке:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- В функции main:
- Объявить три переменные типа
enum TaskStatusс именамиtask1,task2иtask3 - Считать три целых числа из входных данных, представляющих статус каждой задачи (0, 1, 2 или 3)
- Присвоить соответствующие значения enum каждой переменной задачи на основе входных данных:
- Если входное значение 0, присвоить
PENDING - Если входное значение 1, присвоить
IN_PROGRESS - Если входное значение 2, присвоить
COMPLETED - Если входное значение 3, присвоить
CANCELLED
- Если входное значение 0, присвоить
- Вывести статус каждой задачи, используя значения enum в этом точном формате:
Task 1 status: [numeric_value]Task 2 status: [numeric_value]Task 3 status: [numeric_value]
- Подсчитать и вывести количество задач в каждой категории статуса:
Pending tasks: [count]In progress tasks: [count]Completed tasks: [count]Cancelled tasks: [count]
- Рассчитать и вывести общее количество активных задач (задач, которые находятся в статусе
PENDINGилиIN_PROGRESS) в этом точном формате:Active tasks: [count]
- Объявить три переменные типа
Эта задача демонстрирует, как переменные enum делают код более читаемым, используя осмысленные имена вместо необработанных чисел. Вы попрактикуетесь в объявлении переменных enum, присвоении значений enum на основе входных данных, использовании констант enum в сравнениях и выполнении вычислений со значениями enum.
Шпаргалка
Для объявления переменных перечисляемого типа (enum) используйте тот же синтаксис, что и для объявления любой другой переменной:
enum DayOfWeek today;
enum DayOfWeek weekend_day;Присваивайте значения переменным enum, используя именованные константы из вашего перечисления:
today = WEDNESDAY;
weekend_day = SATURDAY;Использование имен enum вместо обычных чисел делает код более читаемым и менее подверженным ошибкам. Сравните today = WEDNESDAY; с today = 2; — версия с enum сразу показывает, с каким днем вы работаете.
Попробуйте сами
#include <stdio.h>
// TODO: Определите здесь перечисление TaskStatus
int main() {
// Считайте ввод для трех статусов задач
int status1, status2, status3;
scanf("%d", &status1);
scanf("%d", &status2);
scanf("%d", &status3);
// TODO: Объявите три переменные перечисления TaskStatus (task1, task2, task3)
// TODO: Присвойте значения перечисления на основе ввода
// TODO: Выведите статусы задач
// TODO: Подсчитайте количество задач в каждой категории
// TODO: Рассчитайте и выведите количество активных задач
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов7Структуры (structs)
Что такое структура?Объявление структурыСоздание переменных структурДоступ к членам структурыИнициализация структурПовторение: структура данных Student10Перечисления и typedef
enum для именованных константОбъявление и использование enumEnum в операторах switchИспользование typedef для псевдонимов типовtypedef со структурамиИтоги: практика по typedef и enum2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции