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_diausandoswitch. - 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
- Definimos o
enum DiaSemanacom as constantesSEG,TER, ...,DOM. Por padrão,SEGvale 0,TERvale 1, e assim por diante. - Usamos
typedefpara poder escrever apenasDiaSemanaem vez deenum DiaSemana. - A função
imprimir_diarecebe um parâmetro do tipoDiaSemanae usaswitchpara escolher a mensagem correta. - Cada
casecorresponde a uma constante do enum. Obreakevita que a execução continue para o próximo caso. - 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: sembreak, a execução "cai" para o próximocase, imprimindo vários dias. Exemplo:
Corrija adicionandocase SEG: printf("Segunda"); case TER: printf("Terça"); // também executa se d == SEGbreakapós cadaprintf. - Usar
intem vez deDiaSemana: 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. Incluirdefaulté 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