Menu
Coddy logo textTech

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 today
challenge icon

Desafío

Fácil

Crea un programa en C que defina un enum para los colores de un semáforo y demuestre su uso. Tu programa debe:

  1. Definir un enum llamado TrafficLight con las siguientes constantes en este orden exacto:
    • RED
    • YELLOW
    • GREEN
  2. En la función principal:
    • Declarar una variable de tipo enum TrafficLight llamada currentLight
    • Leer un entero de la entrada que represente el estado del semáforo (0, 1 o 2)
    • Asignar el valor de enum correspondiente a currentLight basá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
    • 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: imprimir Action: Stop
      • Si es YELLOW: imprimir Action: Caution
      • Si es GREEN: imprimir Action: Go
    • Calcular e imprimir la siguiente luz en la secuencia:
      • Si la luz actual es RED (0), la siguiente es GREEN (2)
      • Si la luz actual es YELLOW (1), la siguiente es RED (0)
      • Si la luz actual es GREEN (2), la siguiente es YELLOW (1)
    • Imprimir la siguiente luz en este formato exacto: Next light: [enum_name]

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 today

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;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow