[英]C++ program skipping sentences
I have 4 structs:我有4个结构:
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
personajes
包含视频游戏角色的主要特征,它们是:名称cadena_personaje nombre_personaje
、sex char sexo
和 4 个 int 数据类型,代表它的健康、伤害、魔法和最高等级int vidas, danio, magia, nivel
vector_personajes
contains an array size 5 of personajes personaje personajes[5]
and a counter int contador
that keeps track of the number of characters that video game has (max 5). vector_personajes
包含一个大小为 5 的 personajes personaje personajes[5]
数组和一个计数器int contador
,用于跟踪视频游戏的字符数(最多 5 个)。
fecha
contains 3 integers which represent a date, day, month and year. fecha
包含 3 个整数,分别代表日期、日期、月份和年份。 int dia, mes, anio
. 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, a ction, r ol, s imulation..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 s i/ n o (yes or no) videojuego
包含了视频游戏的主要特征,分别是:视频游戏名称cadena_juego cadena_juego titulo_juego
,发布日期fecha fecha_juego
vector_personajes vp
它拥有的char genre
imulation..etc.,它具有int niveles
的级别数,游戏的产品 id(从商店的角度来看) int id
以及玩多人char multijugador
的可能性,可以是s i/ n o(是或否)
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(&v)
方法,给定一个视频游戏,它会读取描述实际视频游戏所需的所有元素。
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.问题是,当我执行
introducir(&v)
方法时,它会到达for
ok,但是一旦进入其中,程序读取的唯一指令就是cout
。
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;
}
cin.get()
only reads one char INCLUDING the /n
after the previos cin. cin.get()
只读取一个字符,包括 previos cin 之后的/n
。 Try to write cin.ignore()
before those cin.get()
like this:尝试在
cin.get()
cin.ignore()
,如下所示:
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<<" :";
My programming teacher answered my e-mail with the solution.我的编程老师用解决方案回复了我的电子邮件。 What's happening is that the
cin.get()
is not working right.发生的事情是
cin.get()
工作不正常。 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 ♀️) so I don't have any problem with the buffer.我要做的是读取
cin()
(不能再读取计划空间但是♀️)所以我对缓冲区没有任何问题。
"The input buffer keeps data and takes it into other fields" is my own English translation to "el buffer de entrada se queda con datos y los toma en los otros campos" if anyone doesn't understand what im saying given that I don't really know what a buffer and what it does, so I can't really express myself with that. “输入缓冲区保存数据并将其带入其他字段”是我自己的英文翻译为“el buffer de entrada se queda con datos y los toma en los otros campos”,如果有人不明白我在说什么,因为我不明白我真的不知道缓冲区是什么以及它的作用,所以我无法用它来表达自己。 Ima keep investigating about that "buffer".
我继续调查那个“缓冲区”。
Thank you all for your answers,!谢谢大家的答案,! Appreciate it, really!
欣赏,真的!
Final code is the following:最终代码如下:
#include <iostream>
using namespace std;
#define maxjue 60
#define maxcad 41
#define maxper 5
typedef char cadena_juego[maxjue];
typedef char cadena_personaje[maxcad];
typedef struct
{
cadena_personaje nombre_personaje;
char sexo;
int vidas, danio, magia, nivel;
}personaje;
typedef personaje v_per [maxper];
typedef struct
{
v_per personajes;
int contador;
}vector_personajes;
typedef struct
{
int dia, mes, anio;
}fecha;
typedef struct
{
vector_personajes vp;
fecha fecha_juego;
cadena_juego titulo_juego;
char genero;
int id, niveles;
char multijugador;
}videojuego;
void introducir(videojuego &v);
int main()
{
videojuego v;
introducir(v);
return 0;
}
void introducir(videojuego &v)
{
int fecha, cont;
char aux;
//juego
cout<<"Introduce el titulo del videojuego: ";
cin>>v.titulo_juego;
cout<<"Introduce el id: ";
cin>>v.id;
cout<<"Introduce el genero ";
cin>>v.genero;
while (v.genero!='a' && v.genero!='r' && v.genero!='e' && v.genero!='s' && v.genero!='d' )
{
cout<<"Genero incorrecto, vuelva a introducir:";
cin>>v.genero;
}
cout<<"Introduce el numero de personajes: ";
cin>>v.vp.contador;
cout<<"Hola";//intento ver donde está el fallo
//en realidad no hay tal fallo, el cin.get no esta funcionando bien
//el buffer de entrada se queda con datos y los toma en los otros campos
//lee con cin>> las cadenas para no tener problemas de buffer
for (int i = 0; i < v.vp.contador; i++)
{
cout<<"Introduce el nombre del personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].nombre_personaje;
cout<<"Introduce las vidas del personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].vidas;
cout<<"Introduce el danio maximo que puede hacer el personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].danio;
cout<<"Introduce el nivel maximo al que puede llegar el personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].nivel;
cout<<"Introduce sexo del personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].sexo;
while (v.vp.personajes[i].sexo!='H'&& v.vp.personajes[i].sexo !='h'&& v.vp.personajes[i].sexo !='m'&& v.vp.personajes[i].sexo !='M')
{
cout<<"Error, Introduce de nuevo sexo del personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].sexo;
}
cout<<"Introduce la magia del personaje "<<i+1<<" :";
cin>>v.vp.personajes[i].magia;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.