Declarando e Usando Enums
Parte da seção Logic & Flow do Journey de C da Coddy — lição 56 de 63.
Agora que você definiu um enum, você pode criar variáveis desse tipo enum e atribuir a elas valores significativos. É aqui que os enums realmente brilham - em vez de trabalhar com números confusos, você usa nomes descritivos.
Para declarar uma variável de um tipo enum, você usa a mesma sintaxe que usaria para declarar qualquer outra variável:
enum DayOfWeek today;
enum DayOfWeek weekend_day;Você pode então atribuir valores a essas variáveis usando as constantes nomeadas do seu enum:
today = WEDNESDAY;
weekend_day = SATURDAY;Compare isso ao uso de números brutos: today = 2; e weekend_day = 5;. A versão enum informa imediatamente com qual dia você está trabalhando, enquanto os números exigem que você se lembre do que cada valor representa. Isso torna seu código muito mais legível e menos propenso a erros.
Desafio
FácilCrie um programa em C que demonstre a declaração e o uso de variáveis enum para um sistema simples de gerenciamento de tarefas. Seu programa deve:
- Definir um
enumchamadoTaskStatuscom as seguintes constantes nesta ordem exata:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- Na função principal:
- Declarar três variáveis do tipo
enum TaskStatuschamadastask1,task2etask3 - Ler três números inteiros da entrada representando o status de cada tarefa (0, 1, 2 ou 3)
- Atribuir os valores enum correspondentes a cada variável de tarefa com base na entrada:
- Se a entrada for 0, atribua
PENDING - Se a entrada for 1, atribua
IN_PROGRESS - Se a entrada for 2, atribua
COMPLETED - Se a entrada for 3, atribua
CANCELLED
- Se a entrada for 0, atribua
- Imprimir o status de cada tarefa usando os valores enum neste formato exato:
Task 1 status: [numeric_value]Task 2 status: [numeric_value]Task 3 status: [numeric_value]
- Contar e imprimir quantas tarefas estão em cada categoria de status:
Pending tasks: [count]In progress tasks: [count]Completed tasks: [count]Cancelled tasks: [count]
- Calcular e imprimir o número total de tarefas ativas (tarefas que estão como
PENDINGouIN_PROGRESS) neste formato exato:Active tasks: [count]
- Declarar três variáveis do tipo
Este desafio demonstra como as variáveis enum tornam o código mais legível ao usar nomes significativos em vez de números brutos. Você praticará a declaração de variáveis enum, a atribuição de valores enum com base na entrada, o uso de constantes enum em comparações e a realização de cálculos com valores enum.
Folha de consulta
Para declarar variáveis de um tipo enum, use a mesma sintaxe que a declaração de qualquer outra variável:
enum DayOfWeek today;
enum DayOfWeek weekend_day;Atribua valores a variáveis enum usando as constantes nomeadas do seu enum:
today = WEDNESDAY;
weekend_day = SATURDAY;Usar nomes de enum em vez de números brutos torna o código mais legível e menos propenso a erros. Compare today = WEDNESDAY; com today = 2; - a versão enum mostra imediatamente com qual dia você está trabalhando.
Experimente você mesmo
#include <stdio.h>
// TODO: Defina o enum TaskStatus aqui
int main() {
// Lê a entrada para três status de tarefa
int status1, status2, status3;
scanf("%d", &status1);
scanf("%d", &status2);
scanf("%d", &status3);
// TODO: Declare três variáveis enum TaskStatus (task1, task2, task3)
// TODO: Atribua valores ao enum com base na entrada
// TODO: Imprima os status das tarefas
// TODO: Conte as tarefas em cada categoria
// TODO: Calcule e imprima a contagem de tarefas ativas
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