[英]C++ program skipping sentences
我有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
包含视频游戏角色的主要特征,它们是:名称cadena_personaje nombre_personaje
、sex char sexo
和 4 个 int 数据类型,代表它的健康、伤害、魔法和最高等级int vidas, danio, magia, nivel
vector_personajes
包含一个大小为 5 的 personajes personaje personajes[5]
数组和一个计数器int contador
,用于跟踪视频游戏的字符数(最多 5 个)。
fecha
包含 3 个整数,分别代表日期、日期、月份和年份。 int dia, mes, anio
.
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(是或否)
我有一个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;
}
}
问题是,当我执行introducir(&v)
方法时,它会到达for
ok,但是一旦进入其中,程序读取的唯一指令就是cout
。
我只是不知道该怎么办。 如果有人可以复制和粘贴我的代码,编译并运行它,并尝试弄清楚发生了什么,我将不胜感激。
这是完整的代码:
#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()
只读取一个字符,包括 previos cin 之后的/n
。 尝试在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<<" :";
我的编程老师用解决方案回复了我的电子邮件。 发生的事情是cin.get()
工作不正常。 输入缓冲区保存数据并将其带入其他字段。 我要做的是读取cin()
(不能再读取计划空间但是♀️)所以我对缓冲区没有任何问题。
“输入缓冲区保存数据并将其带入其他字段”是我自己的英文翻译为“el buffer de entrada se queda con datos y los toma en los otros campos”,如果有人不明白我在说什么,因为我不明白我真的不知道缓冲区是什么以及它的作用,所以我无法用它来表达自己。 我继续调查那个“缓冲区”。
谢谢大家的答案,! 欣赏,真的!
最终代码如下:
#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.