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.
Prué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