Enum em C

Por: Eduardo Casavella
É um tipo de dado definido pelo usuário que define uma variável que vai receber apenas um conjunto restrito de valores. Na realidade, um enum é um conjunto de valores inteiros representados por identificadores.

Sintaxe:

enum < nome > { < constante1 > , < constante2 > , · · · , < constanteN > , }

Um exemplo clássico é usar uma enum para armazenar os meses do ano. Vejamos como funciona:

enum meses_do_ano { Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}

Por padrão o primeiro valor de uma enum é inicializado com zero. Mas é possível determinar o valor inicial, basta declarar o primeiro valor para o identificador, e os valores seguintes serão automaticamente calculados com um incremento de uma unidade.

Então podemos atribuir o valor 1 para janeiro como abaixo:

enum meses_do_ano { Janeiro=1, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}

Alguns compiladores são capazes de verificar quando um valor que não está na lista da enum está sendo atribuído, porém outros não são, logo isto fica a cargo do programador.
Exemplo: Utilizando enum

#include <stdio.h>
#include <conio.h>
	//definição da enum
	enum meses_do_ano {Janeiro = 1, Fevereiro, Marco, Abril, Maio, Junho,
	Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}meses;

int main(void)
{
	printf("Digite o numero do mes: ");
	scanf("%d",&meses);
	
	//Testando se o valor está na faixa válida usando os valores da enum
	if((meses >= Janeiro) && (meses <= Dezembro))
	{
	
		//switch que determina qual mes será impresso na tela
		switch(meses)
		{
		case Janeiro:
		printf("%d - Janeiro",meses);
		break;
		
		case Fevereiro:
		printf("%d - Fevereiro",meses);
		break;
		
		case Marco:
		printf("%d - Marco",meses);
		break;
		
		case Abril:
		printf("%d - Abril",meses);
		break;
		
		case Maio:
		printf("%d - Maio",meses);
		break;
		
		case Junho:
		printf("%d - Junho",meses);
		break;
		
		case Julho:
		printf("%d - Julho",meses);
		break;
		
		case Agosto:
		printf("%d - Agosto",meses);
		break;
		
		case Setembro:
		printf("%d - Setembro",meses);
		break;
		
		case Outubro:
		printf("%d - Outubro",meses);
		break;
		
		case Novembro:
		printf("%d - Novembro",meses);
		break;
		
		case Dezembro:
		printf("%d - Dezembro",meses);
		break;
		
		}
	}
	else //senão estiver na faixa válida exibe mensagem
	{
		printf("Valor INVALIDO!!!\n");
		
		printf("Os valores validos para os meses do ano sao: \n\n");
		//Loop que exibe a faixa de valores válida
		//Note que os valores da enum são na realidade inteiros
		//então podemos incrementa-los e usar no loop
		for(meses = Janeiro; meses <= Dezembro; meses++)
			printf("Mes: %d \n",meses);
	}
	
	getch();
	return 0;
}

 

Tela de execução

exemplo utilizando enum

Tela de execução do exemplo utilizando enum

Exemplo utilizando enum valor invalido

Tela de execução do exemplo utilizando enum com valor invalido

Até a próxima!

4 respostas a Enum em C