enum para Constantes Nomeadas
Parte da seção Lógica e Fluxo 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 de enum a elas:
enum DayOfWeek today;
today = MONDAY; // atribui 0 a todayDesafio
FácilCrie um programa em C que defina um enum para as cores do semáforo e demonstre seu uso. Seu programa deve:
- Definir um
enumchamadoTrafficLightcom as seguintes constantes nesta ordem exata:REDYELLOWGREEN
- Na função main:
- Declarar uma variável do tipo
enum TrafficLightchamadacurrentLight - Ler um inteiro da entrada representando o estado do semáforo (0, 1 ou 2)
- Atribuir o valor correspondente do enum a
currentLightcom base na entrada:- Se a entrada for 0, atribuir
RED - Se a entrada for 1, atribuir
YELLOW - Se a entrada for 2, atribuir
GREEN
- Se a entrada for 0, atribuir
- Imprimir o status atual do semáforo neste formato exato:
Current light: [enum_name] - Imprimir o valor numérico do semáforo atual neste formato exato:
Numeric value: [number] - Determinar e imprimir a ação com base no semáforo atual:
- Se for
RED: imprimirAction: Stop - Se for
YELLOW: imprimirAction: Caution - Se for
GREEN: imprimirAction: Go
- Se for
- Calcular e imprimir o próximo semáforo na sequência:
- Se o semáforo atual for
RED(0), o próximo seráGREEN(2) - Se o semáforo atual for
YELLOW(1), o próximo seráRED(0) - Se o semáforo atual for
GREEN(2), o próximo seráYELLOW(1)
- Se o semáforo atual for
- Imprimir o próximo semáforo neste formato exato:
Next light: [enum_name]
- Declarar uma variável do tipo
Este desafio demonstra como as constantes de 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 de enum em atribuições e comparações e o acesso aos valores inteiros subjacentes das constantes de enum.
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;
}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
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 ContatoPratique por conta própria: Compilador de C online