Duda 'tipo enumerado'

Iniciado por JonaLamper, 20 Enero 2014, 23:48 PM

0 Miembros y 1 Visitante están viendo este tema.

JonaLamper

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 (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;


// const int NumColores = 6;
// const int Longitud = 4;
// const int MaxIntentos = 30;
// const bool Repeticion = false;
// const string HelpFile = "ayuda.txt";

typedef enum { rojo, azul, verde, negro, granate, marron } tColores;

// typedef tColores tCodigo[Longitud];

/* subprogramas minimos que hay que implementar... piensa en otros adicionales que puedan
ayudar a modularizar mas el programa */

// void generar(tCodigo codigo);
// tColores letraAColor(char c);
// char colorALetra(tColores color);
// void jugar(int& numintentos); // Devuelve el numero de intentos (0 si el jugador abandona el juego)
// void leerCodigo(tCodigo codigo, bool& cancelar);
// void chequear(const tCodigo secreto, const tCodigo jugador, int& correctos, int& descolocados);
// void mostrarMovimiento(const tCodigo jugador, int intento, int correctos, int descolocados);
// void mostrarAyuda();

tColores numAColor (int numero);

int main() {

tColores digito;
int numero = 1; //Para hacer la prueba
digito = numAColor (numero);
cout << digito;

   return 0;
}

tColores numAColor (int numero) {
   tColores digito;
 
  switch (numero) {
   case 0:
      digito = rojo;
      break;
   case 1:
      digito = azul;
      break;
   case 2:
      digito = verde;
      break;
   case 3:
      digito = negro;
      break;
   case 4:
      digito = granate;
      break;
   case 5:
      digito = marron;
   }
 
return digito;
}
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

ivancea96

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.

JonaLamper

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:
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

ivancea96

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 (cpp) [Seleccionar]
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