Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JonaLamper en 20 Enero 2014, 23:48 pm



Título: Duda 'tipo enumerado'
Publicado por: JonaLamper en 20 Enero 2014, 23:48 pm
Buenas! Cuando ejecuto este código me devuelve un 1 (correspondiente al color azul). Por qué no me devuelve 'azul' como tal en vez de el 1? Se supone que me tiene que devolver algo del tipo tColores... Qué lío.

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <ctime>
  5. #include <cstdlib>
  6. using namespace std;
  7.  
  8.  
  9. // const int NumColores = 6;
  10. // const int Longitud = 4;
  11. // const int MaxIntentos = 30;
  12. // const bool Repeticion = false;
  13. // const string HelpFile = "ayuda.txt";
  14.  
  15. typedef enum { rojo, azul, verde, negro, granate, marron } tColores;
  16.  
  17. // typedef tColores tCodigo[Longitud];
  18.  
  19. /* subprogramas minimos que hay que implementar... piensa en otros adicionales que puedan
  20. ayudar a modularizar mas el programa */
  21.  
  22. // void generar(tCodigo codigo);
  23. // tColores letraAColor(char c);
  24. // char colorALetra(tColores color);
  25. // void jugar(int& numintentos); // Devuelve el numero de intentos (0 si el jugador abandona el juego)
  26. // void leerCodigo(tCodigo codigo, bool& cancelar);
  27. // void chequear(const tCodigo secreto, const tCodigo jugador, int& correctos, int& descolocados);
  28. // void mostrarMovimiento(const tCodigo jugador, int intento, int correctos, int descolocados);
  29. // void mostrarAyuda();
  30.  
  31. tColores numAColor (int numero);
  32.  
  33. int main() {
  34.  
  35. tColores digito;
  36. int numero = 1; //Para hacer la prueba
  37. digito = numAColor (numero);
  38. cout << digito;
  39.  
  40.   return 0;
  41. }
  42.  
  43. tColores numAColor (int numero) {
  44.   tColores digito;
  45.  
  46.  switch (numero) {
  47.   case 0:
  48.      digito = rojo;
  49.      break;
  50.   case 1:
  51.      digito = azul;
  52.      break;
  53.   case 2:
  54.      digito = verde;
  55.      break;
  56.   case 3:
  57.      digito = negro;
  58.      break;
  59.   case 4:
  60.      digito = granate;
  61.      break;
  62.   case 5:
  63.      digito = marron;
  64.   }
  65.  
  66. return digito;
  67. }


Título: Re: Duda 'tipo enumerado'
Publicado por: ivancea96 en 20 Enero 2014, 23:57 pm
Un ENUM asigna a cada palabra que tiene dentro, un número. Por defecto, las ordena del 0 al N. Puedes cambiar eso, poniendo: rojo = 5, azul = ... .
Creo que además, puedes "incitarle" un orden poniendo rojo=10, azul=20, ...
No se muy bien esto último, pero puedes probar. Pero lo dicho, en un enum, lo transforma a enteros.


Título: Re: Duda 'tipo enumerado'
Publicado por: JonaLamper en 21 Enero 2014, 00:03 am
Uhmmm, pero imagina que tengo declaro este Array

typedef tColores tCodigo[4];

Este Array sólo me va a guardar valores del tipo tColores, no? y si los valores del tipo tColores en el fondo son números tipo int, porque el Array no me deja guardar valores tipo int?  :huh:


Título: Re: Duda 'tipo enumerado'
Publicado por: ivancea96 en 21 Enero 2014, 00:09 am
Vamos a ver. No soy yo experto en enums, pero sé que el uso normal que se le da a enums, es para entender las cosas. Por ejemplo: en una clase, pongo que si recibe clase(0), haga un cout q ponga "HOLA". Si recibe un 1, hace que diga "QUE TAL", y si recibe un 3, dice "ADIOS". Los números no son tan intuitivos, como poner:
Código
  1. enum salidas{ hola, qtal, adios};
Así, pondría: clase(salidas.hola); y sería como enviarle un 0.

(No se si los codes los escribí muy bien, pero el concepto era ese xd)

Si quieres guardar valores tipo int, puedes usar arrays, vectores, listas, etc etc