enum para constantes con nombre
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 55 de 63.
Al escribir programas en C, a menudo necesitas trabajar con conjuntos de valores constantes relacionados. Por ejemplo, es posible que necesites representar los días de la semana, los meses del año o diferentes estados en un programa. En lugar de usar números brutos como 0, 1, 2, puedes usar enum para crear nombres significativos para estas constantes.
Un tipo enumerado, o enum, te permite definir un grupo de constantes de enteros con nombre. Esto hace que tu código sea mucho más legible y fácil de mantener. Aquí tienes la sintaxis básica:
enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};Por defecto, el primer nombre obtiene el valor 0, el segundo obtiene 1, y así sucesivamente. Así que MONDAY es igual a 0, TUESDAY es igual a 1, y SUNDAY es igual a 6. Este enfoque es mucho más claro que recordar que el día 0 significa lunes o el día 6 significa domingo.
El uso de enum hace que tu código sea autodocumentado y ayuda a prevenir errores que pueden ocurrir al usar números mágicos en todo tu programa.
Puedes declarar variables de tipo enum y asignarles valores de enum:
enum DayOfWeek today;
today = MONDAY; // asigna 0 a todayDesafío
FácilCrea un programa en C que defina un enum para los colores de un semáforo y demuestre su uso. Tu programa debe:
- Definir un
enumllamadoTrafficLightcon las siguientes constantes en este orden exacto:REDYELLOWGREEN
- En la función principal:
- Declarar una variable de tipo
enum TrafficLightllamadacurrentLight - Leer un entero de la entrada que represente el estado del semáforo (0, 1 o 2)
- Asignar el valor de enum correspondiente a
currentLightbasándose en la entrada:- Si la entrada es 0, asignar
RED - Si la entrada es 1, asignar
YELLOW - Si la entrada es 2, asignar
GREEN
- Si la entrada es 0, asignar
- Imprimir el estado actual de la luz en este formato exacto:
Current light: [enum_name] - Imprimir el valor numérico de la luz actual en este formato exacto:
Numeric value: [number] - Determinar e imprimir la acción basada en la luz actual:
- Si es
RED: imprimirAction: Stop - Si es
YELLOW: imprimirAction: Caution - Si es
GREEN: imprimirAction: Go
- Si es
- Calcular e imprimir la siguiente luz en la secuencia:
- Si la luz actual es
RED(0), la siguiente esGREEN(2) - Si la luz actual es
YELLOW(1), la siguiente esRED(0) - Si la luz actual es
GREEN(2), la siguiente esYELLOW(1)
- Si la luz actual es
- Imprimir la siguiente luz en este formato exacto:
Next light: [enum_name]
- Declarar una variable de tipo
Este desafío demuestra cómo las constantes enum hacen que el código sea más legible que el uso de números brutos. En lugar de recordar que 0 significa rojo, 1 significa amarillo y 2 significa verde, puedes usar nombres significativos como RED, YELLOW y GREEN. Practicarás la definición de un enum, el uso de constantes enum en asignaciones y comparaciones, y el acceso a los valores enteros subyacentes de las constantes enum.
Hoja de referencia
Un enum te permite definir un grupo de constantes enteras con nombre, haciendo que el código sea más legible que usar números brutos:
enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};Por defecto, el primer nombre obtiene el valor 0, el segundo obtiene 1, y así sucesivamente. Así que MONDAY es igual a 0, TUESDAY es igual a 1, etc.
Puedes declarar variables de tipo enum y asignarles valores de enum:
enum DayOfWeek today;
today = MONDAY; // asigna 0 a todayPruébalo tú mismo
#include <stdio.h>
// TODO: Define el enum TrafficLight aquí
int main() {
// Leer entrada
int input;
scanf("%d", &input);
// TODO: Declarar la variable currentLight y asignar el valor del enum basado en la entrada
// TODO: Imprimir el estado actual de la luz
// TODO: Imprimir el valor numérico
// TODO: Imprimir la acción basada en la luz actual
// TODO: Calcular e imprimir la siguiente luz
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres7Estructuras (structs)
¿Qué es un struct?Declaración de un structCreación de variables de tipo structAcceso a los miembros de un structInicialización de structsResumen: Struct de datos de estudiantes10Enums y Typedef
enum para constantes con nombreDeclaración y uso de enumsEnums en sentencias switchUso de typedef para alias de tipostypedef con structsRepaso: Práctica de typedef y enums2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas