I have 4 structs:
typedef struct personaje{
cadena_personaje nombre_personaje;
char sexo;
int vidas, danio, magia, nivel;
}personaje;
typedef struct vector_personajes{
personaje personajes[5];
int contador;
}vector_personajes;
typedef struct fecha{
int dia, mes, anio;
}fecha;
typedef struct videojuego{
vector_personajes vp;
fecha fecha_juego;
cadena_juego titulo_juego;
char genero;
int id, niveles;
char multijugador;
}videojuego;
personajes
contains the main features of the video game characters which are: the name cadena_personaje nombre_personaje
, the sex char sexo
and 4 int data types that represent the health, damage, magic and max level of it int vidas, danio, magia, nivel
vector_personajes
contains an array size 5 of personajes personaje personajes[5]
and a counterint contador
that keeps track of the number of characters that video game has (max 5).
fecha
contains 3 integers which represent a date, day, month and year. int dia, mes, anio
.
videojuego
contains the main characteristics of the video game, which are: the name of the video game cadena_juego titulo_juego
, the release date fecha fecha_juego
, the characters it has vector_personajes vp
, the genre char genre
which can be, action, rol, simulation..etc., the number of levels it has int niveles
, the product id of the game (from a store perspective) int id
and the possibility of playing multiplayer char multijugador
which can be si/no (yes or no)
I have a void introducir(&v)
method which, given a video game, reads all the elements needed to describe the actual video game.
void introducir(videojuego &v){
int fecha, cont;
bool correcto=false;
//juego
cout<<"Introduce el titulo del videojuego: ";
cin.get(v.titulo_juego,60);
cout<<"Introduce el id: ";
cin>>v.id;
cout<<"Introduce el genero ";
while (!correcto){
cin>>v.genero;
switch (v.genero)
{
case 'a':
correcto=true;
break;
case 'r':
correcto=true;
break;
case 'e':
correcto=true;
break;
case 's':
correcto=true;
break;
case 'd':
correcto=true;
break;
default:
cout<<"El genero es incorrecto, por favor vuelva a introducrilo: ";
break;
}
}
correcto=false;
cout<<"Introduce el numero de personajes: ";
cin>>v.vp.contador;
cout<<"Hola";//intento ver donde está el fallo
for (int i = 1; i <= v.vp.contador; i ){
cout<<"Introduce el nombre del personaje "<<i<<" :";
cin.get(v.vp.personajes[i].nombre_personaje,40);
cout<<"Introduce las vidas del personaje "<<i<<" :";
cin>>v.vp.personajes[i].vidas;
cout<<"Introduce el danio maximo que puede hacer el personaje "<<i<<" :";
cin>>v.vp.personajes[i].danio;
cout<<"Introduce el nivel maximo al que puede llegar el personaje "<<i<<" :";
cin>>v.vp.personajes[i].nivel;
cout<<"Introduce sexo del personaje "<<i<<" :";
correcto=false;
/*while (!correcto){
cin>>v.vp.personajes[i].sexo;
if (v.vp.personajes[i].sexo=='H'||v.vp.personajes[i].sexo=='h'||v.vp.personajes[i].sexo=='m'||v.vp.personajes[i].sexo=='M'){
correcto=true;
}
else{
cout<<"hola: ";
}
}*/
correcto=false;
cout<<"Introduce la magia del personaje "<<i<<" :";
cin>>v.vp.personajes[i].magia;
}
}
The problem is that when I execute the introducir(&v)
method, it gets to the for
ok, but once inside it, the only instructions that the program reads are the cout
s.
I just don't know what to do. I would really appreciate if anyone could copy and paste my code, compile and run it, and try to figure out what's happening.
Here's the full code:
#include <iostream>
using namespace std;
typedef char cadena_juego[60];
typedef char cadena_personaje[41];
typedef struct personaje{
cadena_personaje nombre_personaje;
char sexo;
int vidas, danio, magia, nivel;
}personaje;
typedef struct vector_personajes{
personaje personajes[5];
int contador;
}vector_personajes;
typedef struct fecha{
int dia, mes, anio;
}fecha;
typedef struct videojuego{
vector_personajes vp;
fecha fecha_juego;
cadena_juego titulo_juego;
char genero;
int id, niveles;
char multijugador;
}videojuego;
void introducir(videojuego &v){
int fecha, cont;
bool correcto=false;
//juego
cout<<"Introduce el titulo del videojuego: ";
cin.get(v.titulo_juego,60);
cout<<"Introduce el id: ";
cin>>v.id;
cout<<"Introduce el genero ";
while (!correcto){
cin>>v.genero;
switch (v.genero)
{
case 'a':
correcto=true;
break;
case 'r':
correcto=true;
break;
case 'e':
correcto=true;
break;
case 's':
correcto=true;
break;
case 'd':
correcto=true;
break;
default:
cout<<"El genero es incorrecto, por favor vuelva a introducrilo: ";
break;
}
}
correcto=false;
cout<<"Introduce el numero de personajes: ";
cin>>v.vp.contador;
cout<<"Hola";//intento ver donde está el fallo
for (int i = 1; i <= v.vp.contador; i ){
cout<<"Introduce el nombre del personaje "<<i<<" :";
cin.get(v.vp.personajes[i].nombre_personaje,40);
cout<<"Introduce las vidas del personaje "<<i<<" :";
cin>>v.vp.personajes[i].vidas;
cout<<"Introduce el danio maximo que puede hacer el personaje "<<i<<" :";
cin>>v.vp.personajes[i].danio;
cout<<"Introduce el nivel maximo al que puede llegar el personaje "<<i<<" :";
cin>>v.vp.personajes[i].nivel;
cout<<"Introduce sexo del personaje "<<i<<" :";
correcto=false;
/*while (!correcto){
cin>>v.vp.personajes[i].sexo;
if (v.vp.personajes[i].sexo=='H'||v.vp.personajes[i].sexo=='h'||v.vp.personajes[i].sexo=='m'||v.vp.personajes[i].sexo=='M'){
correcto=true;
}
else{
cout<<"hola: ";
}
}*/
correcto=false;
cout<<"Introduce la magia del personaje "<<i<<" :";
cin>>v.vp.personajes[i].magia;
}
}
int main(){
videojuego v;
introducir(v);
return 0;
}
CodePudding user response:
cin.get()
only reads one char
, which in this case is the \n
left behind by the previous operator>>
. Try using cin.ignore()
before the cin.get()
, like this:
for (int i = 1; i <= v.vp.contador; i ){
cout<<"Introduce el nombre del personaje "<<i<<" :";
cin.ignore();
cin.get(v.vp.personajes[i].nombre_personaje,40);
cout<<"Introduce las vidas del personaje "<<i<<" :";
cin>>v.vp.personajes[i].vidas;
cout<<"Introduce el danio maximo que puede hacer el personaje "<<i<<" :";
cin>>v.vp.personajes[i].danio;
cout<<"Introduce el nivel maximo al que puede llegar el personaje "<<i<<" :";
cin>>v.vp.personajes[i].nivel;
cout<<"Introduce sexo del personaje "<<i<<" :";
CodePudding user response:
My programming teacher answered my e-mail with the solution. What's happening is that the cin.get()
is not working right. The input buffer keeps data and takes it into other fields.
What I gotta do is reading cin()
(not being able to read plan spaces anymore but