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
Até a próxima!


4 respostas a Enum em C