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.
Desafío
FácilCrea un programa en C que use un enum con una sentencia switch para construir un sistema sencillo de recomendaciones meteorológicas. Tu programa debe:
- Definir un
enumllamadoWeatherConditioncon las siguientes constantes en este orden exacto:SUNNYCLOUDYRAINYSTORMYSNOWY
- Escribir una función llamada
getWeatherAdviceque:- Reciba un parámetro de tipo
enum WeatherConditionllamadoweather - No devuelva nada (void)
- Use una sentencia
switchpara imprimir recomendaciones meteorológicas específicas según la condición:- Para
SUNNY: imprimirPerfect day for outdoor activities! - Para
CLOUDY: imprimirGood day for a walk, no sun protection needed. - Para
RAINY: imprimirDon't forget your umbrella! - Para
STORMY: imprimirStay indoors and avoid travel. - Para
SNOWY: imprimirDrive carefully and dress warmly.
- Para
- Reciba un parámetro de tipo
- Escribir una función llamada
getActivitySuggestionque:- Reciba un parámetro de tipo
enum WeatherConditionllamadoweather - No devuelva nada (void)
- Use una sentencia
switchpara sugerir actividades según el clima:- Para
SUNNY: imprimirSuggested activity: Beach or hiking - Para
CLOUDY: imprimirSuggested activity: Photography or gardening - Para
RAINY: imprimirSuggested activity: Reading or indoor games - Para
STORMY: imprimirSuggested activity: Movie marathon - Para
SNOWY: imprimirSuggested activity: Skiing or hot cocoa
- Para
- Reciba un parámetro de tipo
- En la función main:
- Declarar una variable de tipo
enum WeatherConditionllamadacurrentWeather - 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
currentWeathersegún la entrada - Imprimir la condición meteorológica actual con este formato exacto:
Current weather: [numeric_value] - Llamar a la función
getWeatherAdviceconcurrentWeather - Llamar a la función
getActivitySuggestionconcurrentWeather
- Declarar una variable de tipo
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;
}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
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 cadenasPractica por tu cuenta: Compilador de C online