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

[sourcecode language=”cpp”]

#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;
}

[/sourcecode]

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