Programar em C/Enumeração
Origem: Wikilivros, livros abertos por um mundo aberto.
| Esta página precisa ser reciclada (discuta). Ao melhorá-la, você estará ajudando o Wikilivros. |
[editar] Enumerations (enum)
Aqui vamos retornar a um tópico antigo.
Enumerations são um outro método de definir constantes. Recordam-se? Tínhamos o:
- #define
- . const int a:
- . enumerations.
[editar] Criando uma nova tipologia de dados
As enumerations definem uma nova tipologia de variável e limita desde logo os valores.
enum colors {black, blue, green, cyan, red, purple, yellow, white};
a maneira mais simples de interpretar uma enumeration é imagina-la como uma matriz de apenas uma coluna Temos o nome da coluna de temos as várias células na coluna. Cada constante enumerada (muitas vezes chamado de enumerator) tem um valor inteiro (caso não seja especificado ele começa em zero)
Exemplo:
| black | blue | green | cyan | purple | yellow | white |
| 0 | 1 | 2 | 3 | 5 | 6 | 7 |
Mas podemos definir o valor tipo
enum forma {quadrado=5, rectangulo,triangulo=27, circulo, elipse}
ficaríamos com a nossa coluna do tipo:
| Quadrado | Rectângulo | Triangulo | Circulo | Elipse |
| 5 | 6 | 27 | 28 | 29 |
reparem nos valores dos números!!!
A vantagem em termos enumerações é que se uma variável é declarada tipo enumeração, tem uma tipologia única e os seus valores estão limitados e poderão ser verificados durante a compilação.
É tal como as estruturas criar tipologias de variáveis
#include <stdio.h> /*Definindo o cabeçalho*/ enum cores { cor1 , /*Aqui uma virgula*/ cor2 , cor3 , cor4 }; /*Aqui um ponto virgula*/ /*typedef transformamos 2 palavras em uma -> tipo_cores*/ typedef enum cores tipo_cores ; /*******************************************************/ /*A função default da lib ou glibc*/ int main(void) { /*Agora usando o nosso novo tipo * temos 4 lugares para definir o que quisermos * Aqui sem typedef teríamos que colocar enum cores */ tipo_cores verde,azul=2,branco,outra_Cor; /*Sim verde existe*/ if(verde) { printf("Estou vivo porque verde esta enumerado \n"); } /*se azul é igual a 2 esta vivo*/ if(azul == 2) { printf("Estou vivo porque azul é igual a 2 ;) \n"); } /* printf não será executado */ if(branco == 12 ) { printf("Não sou igual a 12 vou ficar por aqui mesmo ;) \n"); } return 0 ; /*De um enter depois de } para evitar erros.. }
Aqui podemos ver um outro exemplo com uma função "mostrarRes()" e um switch:
Em este exemplo uma constante e definida e o valor das outra será definido automaticamente.
#include <stdio.h> #include <stdlib.h> /*Mesma coisa com uma função e um switch*/ int main(void) { /*Colocamos 5 se você for Argentino coloque 3 */ int n = 5 ; /*este e o valor que ira para a função do cabeçalho que é um int*/ mostrarRes(n); } /************************ Cabeçalho *********************/ /*Aqui os valores Italia = 4 e Brasil = 5 são incrementados automaticamente*/ enum { ARGENTINA = 3, ITALIA, BRASIL }; void mostrarRes(int quem) { /*O valor 5 vai chegar aqui no lugar de "quem" */ switch(quem) { case BRASIL : printf( "Brasil invencível como de costume\n" ); break; case ARGENTINA : printf("Argentina um dia quem sabe\n") ; break; case ITALIA : printf("Foi sorte\n") ; break; default : printf("Se estou vivo teve erro do sistema xx \n"); } printf("The end , hasta la vista\n \n"); /*Final feliz*/ /*De um enter depois de } para evitar erros.. }