Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿que Falla En Mi Código? (cadenas)

Iniciado por J_F_NASH, 08 de Octubre de 2003, 05:41:54 PM

« anterior - próximo »

J_F_NASH

 #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.

Zaelsius

 ¿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.


HgH

 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
gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

Mars Attacks

 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.

MChiz

 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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.