Menu
Coddy logo textTech

Enums en sentencias switch

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 57 de 63.

Una de las combinaciones más potentes en la programación en C es el uso de valores enum con sentencias switch. Esta combinación crea una lógica de flujo de control excepcionalmente legible y fácil de mantener que expresa claramente el proceso de toma de decisiones de su programa.

Cuando usas constantes de enumeración (enum) como casos en una sentencia switch, el código se vuelve autodocumentado. En lugar de ver números misteriosos como case 0: o case 5:, ves nombres significativos que transmiten inmediatamente su propósito:

switch (day) {
    case MONDAY:
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
    case FRIDAY:
        printf("It's a weekday\n");
        break;
    case SATURDAY:
    case SUNDAY:
        printf("It's a weekend\n");
        break;
}

Este enfoque hace que su código sea mucho más fácil de entender y modificar. Cualquier persona que lea este código sabrá inmediatamente qué representa cada caso, y añadir nuevos casos o cambiar la lógica se vuelve sencillo. El compilador también ayuda a detectar errores: si escribe mal una constante de enumeración (enum), obtendrá un error de compilación en lugar de un error silencioso.

challenge icon

Desafío

Fácil

Crea un programa en C que utilice un enum con una sentencia switch para construir un sistema simple de asesoramiento meteorológico. Tu programa debe:

  1. Definir un enum llamado WeatherCondition con las siguientes constantes en este orden exacto:
    • SUNNY
    • CLOUDY
    • RAINY
    • STORMY
    • SNOWY
  2. Escribir una función llamada getWeatherAdvice que:
    • Reciba un parámetro enum WeatherCondition llamado weather
    • No devuelva nada (void)
    • Utilice una sentencia switch para imprimir consejos específicos del clima basados en la condición:
      • Para SUNNY: imprime Perfect day for outdoor activities!
      • Para CLOUDY: imprime Good day for a walk, no sun protection needed.
      • Para RAINY: imprime Don't forget your umbrella!
      • Para STORMY: imprime Stay indoors and avoid travel.
      • Para SNOWY: imprime Drive carefully and dress warmly.
  3. Escribir una función llamada getActivitySuggestion que:
    • Reciba un parámetro enum WeatherCondition llamado weather
    • No devuelva nada (void)
    • Utilice una sentencia switch para sugerir actividades basadas en el clima:
      • Para SUNNY: imprime Suggested activity: Beach or hiking
      • Para CLOUDY: imprime Suggested activity: Photography or gardening
      • Para RAINY: imprime Suggested activity: Reading or indoor games
      • Para STORMY: imprime Suggested activity: Movie marathon
      • Para SNOWY: imprime Suggested activity: Skiing or hot cocoa
  4. En la función main:
    • Declarar una variable de tipo enum WeatherCondition llamada currentWeather
    • Leer un entero de la entrada que represente la condición climática (0, 1, 2, 3 o 4)
    • Asignar el valor del enum correspondiente a currentWeather basado en la entrada
    • Imprimir la condición climática actual en este formato exacto: Current weather: [numeric_value]
    • Llamar a la función getWeatherAdvice con currentWeather
    • Llamar a la función getActivitySuggestion con currentWeather

Este desafío demuestra el poder de combinar enums con sentencias switch para crear código legible y mantenible. En lugar de usar casos numéricos confusos en tus sentencias switch, usarás constantes de enum significativas que expresan claramente la lógica del programa. La sentencia switch se vuelve autodocumentada, lo que facilita entender qué representa cada caso y modificar el comportamiento según sea necesario.

Hoja de referencia

El uso de valores enum con sentencias switch crea una lógica de flujo de control legible y mantenible:

switch (day) {
    case MONDAY:
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
    case FRIDAY:
        printf("It's a weekday\n");
        break;
    case SATURDAY:
    case SUNDAY:
        printf("It's a weekend\n");
        break;
}

Este enfoque hace que el código sea autodocumentado al utilizar nombres significativos en lugar de números misteriosos como case 0: o case 5:. El compilador ayuda a detectar errores generando fallos de compilación para constantes de enumeración mal escritas en lugar de errores silenciosos.

Pruébalo tú mismo

#include <stdio.h>

// TODO: Definir el enum WeatherCondition aquí

// TODO: Implementar la función getWeatherAdvice aquí

// TODO: Implementar la función getActivitySuggestion aquí

int main() {
    // Leer entrada
    int weatherInput;
    scanf("%d", &weatherInput);
    
    // TODO: Declarar la variable currentWeather y asignar el valor del enum basado en la entrada
    
    // TODO: Imprimir la condición climática actual en el formato "Current weather: [numeric_value]"
    
    // TODO: Llamar a la función getWeatherAdvice
    
    // TODO: Llamar a la función getActivitySuggestion
    
    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