Menu
Coddy logo textTech

enum para Constantes Nomeadas

Parte da seção Logic & Flow do Journey de C da Coddy — lição 55 de 63.

Ao escrever programas em C, você frequentemente precisa trabalhar com conjuntos de valores constantes relacionados. Por exemplo, você pode precisar representar dias da semana, meses do ano ou diferentes estados em um programa. Em vez de usar números brutos como 0, 1, 2, você pode usar enum para criar nomes significativos para essas constantes.

Um tipo enumerado, ou enum, permite que você defina um grupo de constantes inteiras nomeadas. Isso torna seu código muito mais legível e fácil de manter. Aqui está a sintaxe básica:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

Por padrão, o primeiro nome recebe o valor 0, o segundo recebe 1, e assim por diante. Assim, MONDAY é igual a 0, TUESDAY é igual a 1 e SUNDAY é igual a 6. Essa abordagem é muito mais clara do que lembrar que o dia 0 significa segunda-feira ou o dia 6 significa domingo.

O uso de enum torna seu código autodocumentado e ajuda a prevenir erros que podem ocorrer ao usar números mágicos em todo o seu programa.

Você pode declarar variáveis do tipo enum e atribuir valores enum a elas:

enum DayOfWeek today;
today = MONDAY;  // atribui 0 a today
challenge icon

Desafio

Fácil

Crie um programa em C que defina um enum para cores de semáforo e demonstre seu uso. Seu programa deve:

  1. Definir um enum chamado TrafficLight com as seguintes constantes nesta ordem exata:
    • RED
    • YELLOW
    • GREEN
  2. Na função principal:
    • Declarar uma variável do tipo enum TrafficLight chamada currentLight
    • Ler um número inteiro da entrada representando o estado do semáforo (0, 1 ou 2)
    • Atribuir o valor enum correspondente a currentLight com base na entrada:
      • Se a entrada for 0, atribua RED
      • Se a entrada for 1, atribua YELLOW
      • Se a entrada for 2, atribua GREEN
    • Imprimir o status atual da luz neste formato exato: Current light: [enum_name]
    • Imprimir o valor numérico da luz atual neste formato exato: Numeric value: [number]
    • Determinar e imprimir a ação com base na luz atual:
      • Se RED: imprima Action: Stop
      • Se YELLOW: imprima Action: Caution
      • Se GREEN: imprima Action: Go
    • Calcular e imprimir a próxima luz na sequência:
      • Se a luz atual for RED (0), a próxima é GREEN (2)
      • Se a luz atual for YELLOW (1), a próxima é RED (0)
      • Se a luz atual for GREEN (2), a próxima é YELLOW (1)
    • Imprimir a próxima luz neste formato exato: Next light: [enum_name]

Este desafio demonstra como as constantes enum tornam o código mais legível do que o uso de números brutos. Em vez de lembrar que 0 significa vermelho, 1 significa amarelo e 2 significa verde, você pode usar nomes significativos como RED, YELLOW e GREEN. Você praticará a definição de um enum, o uso de constantes enum em atribuições e comparações, e o acesso aos valores inteiros subjacentes das constantes enum.

Folha de consulta

Um enum permite definir um grupo de constantes inteiras nomeadas, tornando o código mais legível do que usar números brutos:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

Por padrão, o primeiro nome recebe o valor 0, o segundo recebe 1, e assim por diante. Portanto, MONDAY é igual a 0, TUESDAY é igual a 1, etc.

Você pode declarar variáveis do tipo enum e atribuir valores de enum a elas:

enum DayOfWeek today;
today = MONDAY;  // atribui 0 a today

Experimente você mesmo

#include <stdio.h>

// TODO: Defina o enum TrafficLight aqui

int main() {
    // Ler entrada
    int input;
    scanf("%d", &input);
    
    // TODO: Declarar a variável currentLight e atribuir o valor do enum com base na entrada
    
    // TODO: Imprimir o status atual da luz
    
    // TODO: Imprimir o valor numérico
    
    // TODO: Imprimir a ação com base na luz atual
    
    // TODO: Calcular e imprimir a próxima luz
    
    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 Logic & Flow