Menu
Coddy logo textTech

Enums em Instruções Switch

Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 57 de 63.

Uma das combinações mais poderosas na programação C é o uso de valores enum com instruções switch. Essa combinação cria uma lógica de fluxo de controle excepcionalmente legível e de fácil manutenção que expressa claramente o processo de tomada de decisão do seu programa.

Quando você usa constantes enum como casos em uma instrução switch, o código se torna autodocumentado. Em vez de ver números misteriosos como case 0: ou case 5:, você vê nomes significativos que transmitem imediatamente seu 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;
}

Essa abordagem torna seu código muito mais fácil de entender e modificar. Qualquer pessoa que leia este código sabe imediatamente o que cada caso representa, e adicionar novos casos ou alterar a lógica se torna simples. O compilador também ajuda a detectar erros — se você escrever incorretamente uma constante de enumeração, receberá um erro de compilação em vez de um bug silencioso.

challenge icon

Desafio

Fácil

Crie um programa em C que use um enum com uma instrução switch para construir um sistema simples de recomendações meteorológicas. Seu programa deve:

  1. Definir um enum chamado WeatherCondition com as seguintes constantes nesta ordem exata:
    • SUNNY
    • CLOUDY
    • RAINY
    • STORMY
    • SNOWY
  2. Escrever uma função chamada getWeatherAdvice que:
    • Receba um parâmetro enum WeatherCondition chamado weather
    • Não retorne nada (void)
    • Use uma instrução switch para exibir recomendações meteorológicas específicas com base na condição:
      • Para SUNNY: exiba Perfect day for outdoor activities!
      • Para CLOUDY: exiba Good day for a walk, no sun protection needed.
      • Para RAINY: exiba Don't forget your umbrella!
      • Para STORMY: exiba Stay indoors and avoid travel.
      • Para SNOWY: exiba Drive carefully and dress warmly.
  3. Escrever uma função chamada getActivitySuggestion que:
    • Receba um parâmetro enum WeatherCondition chamado weather
    • Não retorne nada (void)
    • Use uma instrução switch para sugerir atividades com base no clima:
      • Para SUNNY: exiba Suggested activity: Beach or hiking
      • Para CLOUDY: exiba Suggested activity: Photography or gardening
      • Para RAINY: exiba Suggested activity: Reading or indoor games
      • Para STORMY: exiba Suggested activity: Movie marathon
      • Para SNOWY: exiba Suggested activity: Skiing or hot cocoa
  4. Na função main:
    • Declare uma variável do tipo enum WeatherCondition chamada currentWeather
    • Leia um número inteiro da entrada representando a condição meteorológica (0, 1, 2, 3 ou 4)
    • Atribua o valor correspondente do enum a currentWeather com base na entrada
    • Exiba a condição meteorológica atual neste formato exato: Current weather: [numeric_value]
    • Chame a função getWeatherAdvice com currentWeather
    • Chame a função getActivitySuggestion com currentWeather

Este desafio demonstra o poder de combinar enums com instruções switch para criar um código legível e fácil de manter. Em vez de usar casos numéricos confusos nas instruções switch, você usará constantes de enum significativas que expressam claramente a lógica do programa. A instrução switch se torna autodocumentada, facilitando a compreensão do que cada caso representa e a modificação do comportamento conforme necessário.

Experimente você mesmo

#include <stdio.h>

// TODO: Defina o enum WeatherCondition aqui

// TODO: Implemente a função getWeatherAdvice aqui

// TODO: Implemente a função getActivitySuggestion aqui

int main() {
    // Ler entrada
    int weatherInput;
    scanf("%d", &weatherInput);
    
    // TODO: Declare a variável currentWeather e atribua o valor do enum com base na entrada
    
    // TODO: Imprima a condição climática atual no formato "Current weather: [numeric_value]"
    
    // TODO: Chame a função getWeatherAdvice
    
    // TODO: Chame a função getActivitySuggestion
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de C online