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!

3 respostas a Enum em C