Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 08 de Octubre de 2003, 05:41:54 PM

Título: ¿que Falla En Mi Código? (cadenas)
Publicado por: J_F_NASH en 08 de Octubre de 2003, 05:41:54 PM
 #include <iostream.h>
#include <stdio.h>
#include <string.h>


struct Personajes
{
int Vida;
char Moral[10];
int Experiencia;
};

void main()
{
Personajes Pepe, Miguel, Federiko;

//Pepe
Pepe.Vida = 80;
Pepe.Moral, "Alta";
Pepe.Experiencia = 15;

//Miguel
Miguel.Vida = 85;
Miguel.Moral,"Baja";
Miguel.Experiencia = 25;

//Federiko
Federiko.Vida = 90;
Federiko.Moral, "Normal";
Federiko.Experiencia = 90;

char personaje[100];
cout << "Que personaje deseas ver? (Federiko/Pepe/Miguel): " << endl;
gets(personaje);
cout << "Has escrito: " << personaje << endl;

switch(personaje[100])
{
case 'pepe':
 cout << "PEPE\n";
 cout << "------------\n";
 cout << "Experiencia: " << Pepe.Experiencia << endl;
 cout << "Vida: " << Pepe.Vida << endl;
 break;
case 'miguel':
 cout << "MIGUEL\n";
 cout << "------------\n";
 cout << "Experiencia: " << Miguel.Experiencia << endl;
 cout << "Vida: " << Miguel.Vida << endl;
 break;
case 'Federiko':
 cout << "FEDERIKO\n";
 cout << "------------\n";
 cout << "Experiencia: " << Federiko.Experiencia << endl;
 cout << "Vida: " << Federiko.Vida << endl;
 break;
default:
 cout << "No ha elegido una opcion correcta\n";

}
}



El error siempre es el mismo, (me saca de quicio):
"too many characters in constant"
De verdad que no lo entiendo  :blink:




S2.
Título: ¿que Falla En Mi Código? (cadenas)
Publicado por: Zaelsius en 08 de Octubre de 2003, 05:52:03 PM
 ¿Qué significan estas líneas?

CitarFederiko.Moral, "Normal";

El operador "," (coma) a pesar de existir no sustituye al "=". De todas maneras así no se inicializan las cadenas de caracteres.



Hay dos(bueno realmente hay millones XD) formas de hacerlo:

Con strcpy(string copy):

1) strcpy((*char)&Federiko.Moral,"Normal");

Al declarar la variable:

2) Personaje Federiko={80,"Normal",90};

Y alguna manera más tb hay, pero bueno.



Ahora, lo ideal, es que no uses cadenas de caracteres para la Moral.. puesto que la moral siempre tendrá un valor determinado dentro de un conjunto finito y acotado, es mejor utilizar una enumeración(mirate la palabra reservada enum de C/C++).

Seria algo como

enum eMoral { BAJA, NORMAL, ALTA, MUY_ALTA,  MARS_ATTACKS };

asi luego puedes hacer cosas como:

Federiko.Moral = NORMAL;


Bueno seguro que en tu manual de C/C++ te lo explican mejor XD.

Título: ¿que Falla En Mi Código? (cadenas)
Publicado por: HgH en 08 de Octubre de 2003, 08:41:06 PM
 Huolas!

un par de cosas:

Citar

char personaje[100];
cout << "Que personaje deseas ver? (Federiko/Pepe/Miguel): " << endl;
gets(personaje);
cout << "Has escrito: " << personaje << endl;

switch(personaje[100])
{
case 'pepe':
.
.
.

Esto no te va a funcionar. :P
Acuerdate de que con C no se pueden hacer comparaciones de cadena a pelo (siempre con strcmp). A parte, la comilla simple es para caracteres sueltos, no para cadenas (es por eso que te da el error de  "too many characters in constant")

Tal y como lo tienes montado, habría que hacer algo como:

if (strcmp(personaje,"pepe")  == 0)
{
..........
}else
      if (strcmp(personaje,"miguel")  == 0)
      {
          ..........
      }else
              if (strcmp(personaje,"federico")  == 0)
              {
                ..........
              }
              else
                    printf("\nPersonaje no reconocido");



Por otra parte, ten en cuenta el tema de mayusculas y minusculas. Si te escriben "Miguel" y tu esperas "miguel", strcmp, las va a considerar diferentes.



Saludetes
Título: ¿que Falla En Mi Código? (cadenas)
Publicado por: Mars Attacks en 08 de Octubre de 2003, 09:09:50 PM
 Lo que se suele hacer (para no tener que hacer cienes y miles de comparaciones) es pasar la cadena que te den a mayúsculas o a minúsculas y esperar que ningún gamberro marciano encima te meta acentos si los debería haber. Lo digo para que no te pongas a comparar con miguel y luego con Miguel y luego con ... . Pasas lo que te den a minúsculas (¿función to_lower?) y comparas sólo con minúsculas.

Un saludo.
Título: ¿que Falla En Mi Código? (cadenas)
Publicado por: MChiz en 08 de Octubre de 2003, 09:48:51 PM
 toupper -> Te pasa un caracter a mayusculas ( ctype.h )
tolower -> Te pasa un caracter a minusculas ( ctype.h )

Y si no recuerdo mal, existe una funcion llamada strlwr que te pasa toda una cadena a minusculas. Supongo que tambien existira strupr ( o algo asi ) que te la pase a mayusculas.