Médio C

Enum e switch para dias da semana

Enunciado

Defina um enum chamado DiaSemana com os dias de segunda a domingo. Escreva uma função imprimir_dia que recebe um DiaSemana e imprime o nome do dia usando switch. No main, teste com três dias diferentes.

Requisitos

  • Definir o enum com exatamente 7 constantes (SEG, TER, QUA, QUI, SEX, SAB, DOM).
  • Implementar a função imprimir_dia usando switch.
  • Chamar a função para pelo menos três dias no main.
  • A saída deve mostrar os nomes corretos dos dias.

Código inicial

#include <stdio.h>

// Defina o enum aqui

// Implemente a função imprimir_dia

int main() {
    // Teste a função
    return 0;
}

Saída esperada

Segunda-feira
Quarta-feira
Domingo
Ver dica

Use enum DiaSemana { SEG, TER, ... }; e no switch coloque um case para cada constante. Lembre-se do break.

Mostrar solução
#include <stdio.h>

// Enum com os dias da semana
typedef enum {
    SEG, TER, QUA, QUI, SEX, SAB, DOM
} DiaSemana;

// Função que imprime o nome do dia
void imprimir_dia(DiaSemana d) {
    switch (d) {
        case SEG: printf("Segunda-feira\n"); break;
        case TER: printf("Terça-feira\n"); break;
        case QUA: printf("Quarta-feira\n"); break;
        case QUI: printf("Quinta-feira\n"); break;
        case SEX: printf("Sexta-feira\n"); break;
        case SAB: printf("Sábado\n"); break;
        case DOM: printf("Domingo\n"); break;
        default: printf("Dia inválido\n"); break;
    }
}

int main() {
    imprimir_dia(SEG);
    imprimir_dia(QUA);
    imprimir_dia(DOM);
    return 0;
}

Passo a passo

  1. Definimos o enum DiaSemana com as constantes SEG, TER, ..., DOM. Por padrão, SEG vale 0, TER vale 1, e assim por diante.
  2. Usamos typedef para poder escrever apenas DiaSemana em vez de enum DiaSemana.
  3. A função imprimir_dia recebe um parâmetro do tipo DiaSemana e usa switch para escolher a mensagem correta.
  4. Cada case corresponde a uma constante do enum. O break evita que a execução continue para o próximo caso.
  5. No main, chamamos a função com três valores diferentes para testar.

Por que funciona

O enum associa nomes legíveis a valores inteiros. O switch compara o valor inteiro da variável com cada constante. Como as constantes são únicas, o case correto é selecionado. O default cobre valores fora do intervalo, embora não seja obrigatório se todos os casos forem tratados.

Erros comuns

  • Esquecer o break: sem break, a execução "cai" para o próximo case, imprimindo vários dias. Exemplo:
    case SEG: printf("Segunda");
    case TER: printf("Terça"); // também executa se d == SEG
    
    Corrija adicionando break após cada printf.
  • Usar int em vez de DiaSemana: embora funcione, perde a legibilidade e a verificação do compilador. Prefira o tipo enumerado.
  • Não incluir default: se um valor inválido for passado, nada é impresso. Incluir default é uma boa prática.

Outra forma de resolver

Poderia usar um array de strings indexado pelo enum:

const char *nomes[] = {"Segunda", "Terça", ..., "Domingo"};
printf("%s\n", nomes[d]);

Isso é mais conciso, mas menos explícito e depende da ordem dos valores. O switch é preferível quando a lógica de cada caso pode variar.

Saída esperada

Segunda-feira
Quarta-feira
Domingo