Duda ejercicio Estructuras - C++

fastak_

Buenas,

Estoy haciendo un ejercicio de la clase de C++ sobre Estructuras. El enunciado pide;

"Crear una estructura con las variables nombre, edad, sexo y club. Solicitar al usuario una entrada de datos para cada una e imprimir por pantalla el resultado agregando además el tipo de club al que pertenece en relacion a su edad; <=18 años Juvenil, <=40 Señor, >40 Veterano"

Tras codificar el ejercicio y compilar el ejercicio me hayo que;

  1. La consola me pide inicialmente el "nombre" y solo almacena los 2 primeros caracteres, por ejemplo, de Carlos almacena solos "Ca"
  2. Tras introducir el nombre y pultar Intro ya no pide ningun otro dato más, imprime directamente el resto de couts

Llevo Googleando desde ayer y no veo error el error, de hecho, en la solucion del problema del libro usan exactamente el mismo codigo y el resultado es satisfactorio :thinking:

void Estructura(){ 
  
struct corredor{ char nombre [30]; int edad; char sexo [1]; char club [30]; }var1;
char categoria[20]; cout << "Introducir nombre del corredor: " << endl; cin.getline(var1.nombre, 29, 'n'); fflush(stdin); cout << "Introducir edad del corredor: " << endl; cin >> var1.edad; cout << "Introducir sexo del corredor: " << endl; cin.getline(var1.sexo,1,'n'); cout << "Introducir club del corredor: " << endl; cin.getline(var1.club,29,'n');
if (var1.edad<=18){ strcpy(categoria,"Juvenil");} if (var1.edad<=40){ strcpy(categoria,"Señor");} if(var1.edad>40){ strcpy(categoria,"Veterano");}
cout << "El corredor de nombre: " << var1.nombre << ", de " << var1.edad << " años, perteneciente al club " << var1.club << "participa en la categoria: " << categoria << endl;
E

if (var1.edad<=40){
strcpy(categoria,"Señor");}

Aqui no deberias poner en el condicional ( var1.edad >18 && var1edad <=40?{ .....?? No he tocao C++ pero el condicional creo que esta mal codificado.

gonya707

No estoy acostumbrado a la sintaxis con las librerias de borland, asi que el primer problema no se muy bien como resolverlo. Lo de saltar directamente a los couts sin pedirte que rellenes lo otro suena a buffer lleno, haz un fflush antes de cada input, no solo el primero.

Por cierto, en la seccion donde se decide la categoria juvenil/señor/veterano nunca te va a quedar ninguna como juvenil porque si un numero es menor que 18 es menor que 40 a la fuerza y siempre se va a sobreescribir como señor, necesitas un else o un switch por ahi, o simplemente cambiar el orden de los ifs

1 respuesta
PaCoX

el getline tiene por defecto el \n, con que pongas cin.getline(var1.nombre, 30) te funcionará bien
y si lo pones seria '\n' no 'n'

1 1 respuesta
Gif

Por que estas mezclando C con C++?
Quien te esta enseñando? un profesor o lo aprendes por tu cuenta con algún libro?
Si es profesor te están enseñando mal, si es por ti mismo cambia el libro.

libros
solucion C++
1 respuesta
fastak_

#3 #4 He corregido el condicional, cierto, era algo que estaba mal, PERO, ni aplicando el fflush antes de cada input ni quitando los \n consigo que la ejecución pare a pedir los input requeridos

1 respuesta
fastak_

#5 En realidad es un curso tipo Ucademy que va por video-tutoriales, libro tengo uno que no recuerdo su nombre pero lo consulo de vez en cuando, principalmente la info la saco de Google.

Y como aprendiz eterno te lanzo 2 preguntas a ver si me puedes responder :)

  1. Como identificaste con este trozo de codigo que es una mezcla de C con C++? por los cout?
  2. ¿Que inconveniente tiene según tu mezclarlos?
1 respuesta
P

te recomiendo que antes de empezar a hacer cosas sin sentido en C++ chapucero te informes bien y aprendas el C de K&R

prueba con printf para imprimir la salida y scanf para tomar los datos

este codigo:

if (var1.edad<=18){
           strcpy(categoria,"Juvenil");}
  if (var1.edad<=40){
            strcpy(categoria,"Señor");}
  if(var1.edad>40){
            strcpy(categoria,"Veterano");}

esta mal ya que el primer if considerará si es menor o igual a 18 y asignara "juvenil" pero despues el segundo if tambien cumplira la condicion

lo correcto seria:

if (var1.edad<=18){
           strcpy(categoria,"Juvenil");}
  else if (var1.edad >18 && var1.edad <=40){
            strcpy(categoria,"Señor");}
  else if(var1.edad>40){
            strcpy(categoria,"Veterano");}
Frankicia

#6 Pon un ejemplo de input y output, no debería de parar de llenar hasta 30 cáracteres o \n en tus getline. Y no sabemos que imprimen tus couts.

#7 Estás usando char arrays en vez de la clase string por ejemplo.
Los cout están bien, aunque deberías especificar el namespace siempre (std::cout)

Usuarios habituales