[C con Clase] Problema con código

Oscar pelucheloko en hotmail.com
Dom Feb 17 14:23:37 CET 2013


Hola Steven gracias por la respuesta.

He pegado la línea de:

const char szMensaje[3] = { "piedra", "papel", "tijera" };

En mi código pero el Visual Express 2012 me salta con estos errores en esa línea:

Error    2    error C2117: 'ordenador' : desbordamiento de límites de matriz    C:\Users\Master\Documents\Visual Studio 2012\Projects\Project2\Project2\Source.cpp    107    1    Project2
Error    3    error C2078: hay demasiados inicializadores    C:\Users\Master\Documents\Visual Studio 2012\Projects\Project2\Project2\Source.cpp    107    1    Project2
4    IntelliSense: no se puede usar un valor de tipo "const char [7]" para inicializar una entidad de tipo "char [3]"    c:\Users\Master\Documents\Visual Studio 2012\Projects\Project2\Project2\Source.cpp    107    24    Project2
5    IntelliSense: se esperaba '}'    c:\Users\Master\Documents\Visual Studio 2012\Projects\Project2\Project2\Source.cpp    107    34    Project2

Parece como que se sobrecarga la matriz o algo de eso.


From: Davidson, Steven 
Sent: Sunday, February 17, 2013 3:43 AM
To: Lista de correo sobre C y C++ 
Subject: Re: [C con Clase] Problema con código

Hola Óscar, 

2013/2/16 Oscar <pelucheloko en hotmail.com>

  Hola que tal.

  Estoy intentando hacer el juego de piedra – papel y tijera. Para ello utilizo rand() y uso un vector para rellenar el vector con unas cadenas de texto específicas dependiento del valor que arroje rand(). Os pego un trozo de código que es el que me está dando problemas:


[CORTE]

  El error que salta es que “ordenador” dice el compilador que no está definido, no se, no funciona como espero, un poco de ayuda por favor.


El problema es que defines 'ordenador' en el ámbito de 'if'. Esto significa que al entrar en 'if', se crea el vector (o array), 'ordenador', y al terminar el ámbito, éste se destruye. Por lo tanto, no existe 'ordenador' fuera del bloque, indicado por llaves.

La solución es crear un vector de cadenas de caracteres a modo de base de datos. Sabes de antemano los mensajes de texto que quieres usar. Por lo tanto, guarda todos en un vector y simplemente usa el valor calculado aleatoriamente a modo de índice para acceder a tal o cual cadena. Esto es,

srand( time(NULL) );

const char szMensaje[3] = { "piedra", "papel", "tijera" };

int s = rand() % 3;


cout << "Ordenador: " << szMensaje[s] << endl;


No hace falta las sentencias de 'if', ya que la asociación del valor de 's' y la cadena correspondiente ya existe a la hora de usar vectores: a través de un índice.


Espero que esto te ayude.

Steven



--------------------------------------------------------------------------------
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130217/9abcfa5b/attachment.html>


Más información sobre la lista de distribución Cconclase