Menu
Coddy logo textTech

Enums en sentencias switch

Parte de la sección Lógica y Flujo 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 tu código sea mucho más fácil de entender y modificar. Cualquiera que lea este código sabe inmediatamente qué representa cada caso, y agregar casos nuevos o cambiar la lógica se vuelve sencillo. El compilador también ayuda a detectar errores: si escribes mal una constante de enumeración, obtendrás un error de compilación en lugar de un error silencioso.

challenge icon

Desafío

Fácil

Crea un programa en C que use un enum con una sentencia switch para construir un sistema sencillo de recomendaciones meteorológicas. 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 de tipo enum WeatherCondition llamado weather
    • No devuelva nada (void)
    • Use una sentencia switch para imprimir recomendaciones meteorológicas específicas según la condición:
      • Para SUNNY: imprimir Perfect day for outdoor activities!
      • Para CLOUDY: imprimir Good day for a walk, no sun protection needed.
      • Para RAINY: imprimir Don't forget your umbrella!
      • Para STORMY: imprimir Stay indoors and avoid travel.
      • Para SNOWY: imprimir Drive carefully and dress warmly.
  3. Escribir una función llamada getActivitySuggestion que:
    • Reciba un parámetro de tipo enum WeatherCondition llamado weather
    • No devuelva nada (void)
    • Use una sentencia switch para sugerir actividades según el clima:
      • Para SUNNY: imprimir Suggested activity: Beach or hiking
      • Para CLOUDY: imprimir Suggested activity: Photography or gardening
      • Para RAINY: imprimir Suggested activity: Reading or indoor games
      • Para STORMY: imprimir Suggested activity: Movie marathon
      • Para SNOWY: imprimir 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 meteorológica (0, 1, 2, 3 o 4)
    • Asignar el valor correspondiente del enum a currentWeather según la entrada
    • Imprimir la condición meteorológica actual con 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 fácil de mantener. 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.

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 Lógica y Flujo

Practica por tu cuenta: Compilador de C online