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 todayDesafio
FácilCrie um programa em C que defina um enum para cores de semáforo e demonstre seu uso. Seu programa deve:
- Definir um
enumchamadoTrafficLightcom as seguintes constantes nesta ordem exata:REDYELLOWGREEN
- Na função principal:
- Declarar uma variável do tipo
enum TrafficLightchamadacurrentLight - Ler um número inteiro da entrada representando o estado do semáforo (0, 1 ou 2)
- Atribuir o valor enum correspondente a
currentLightcom base na entrada:- Se a entrada for 0, atribua
RED - Se a entrada for 1, atribua
YELLOW - Se a entrada for 2, atribua
GREEN
- Se a entrada for 0, atribua
- 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: imprimaAction: Stop - Se
YELLOW: imprimaAction: Caution - Se
GREEN: imprimaAction: Go
- Se
- 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)
- Se a luz atual for
- Imprimir a próxima luz neste formato exato:
Next light: [enum_name]
- Declarar uma variável do tipo
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 todayExperimente 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;
}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
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres7Estruturas (structs)
O que é uma Struct?Declarando uma StructCriando Variáveis de StructAcessando Membros de uma StructInicializando StructsRecapitulação: Struct de Dados de Aluno10Enums e Typedef
enum para Constantes NomeadasDeclarando e Usando EnumsEnums em Instruções SwitchUsando typedef para Aliases de Tipotypedef com StructsRecapitulação: Prática de Typedef e Enum2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato