Dev - C++ - problema con void y struct

   
Vista:

problema con void y struct

Publicado por javi (4 intervenciones) el 14/01/2015 17:46:43
hola buenas, mi problema es que en un ejercicio nos han pedido, que pidamos un nombre de usuario y un saldo.

tenemos que hacer un struct para las variables en una cabecera que seria la siguiente.

1
2
3
4
5
struct juegos{
 
       char nombrejugador;
       long int saldojugador;
       }Jugador;

hasta ahi yo creo que todo bien, mi problema es que tenemos que hacer una peticion con un void metiendole los parametros para que lo guarde, pero yo creia que el void no podia devolver ningun resultado.

tengo lo siguiente en el cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "jugador.h"
using namespace std;
 
int main (){
  void solicitarJugador(Jugador.saldojugador& Jugador.nombrejugador){
         cout<<"\nponer saldo";
         cin >>Jugador.saldojugador;
         cout<<"\nponer nombre";
         cin<<Jugador.nombrejugador;
 
         }
 
    cout<<"\nsu saldo es "<<Jugador.saldojugador<<"su nombre es "<<Jugador.nombrejugador;
 
    }

no puedo hacerlo funcionar para que guarde la informacion en las variables!!!! por favor ayudaa!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

problema con void y struct

Publicado por vangodp (287 intervenciones) el 14/01/2015 21:17:53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <cstdio>
using namespace std;
 
struct juegos {
    char nombrejugador[100]; //debes reservar espacio para nombre ya que no se trata de una simple letra y si de una cadena de caracteres.
    long int saldojugador;
}; //<-aqui has creado un objeto del tipo juegos llamado jugador. si fuera un int seria: int Jugador; ...Pero recuerde que es: juego Jugador; ( Jugador es una variable(objeto) del tipo juego ;) )
struct juegos Jugador;
 
void solicitarJugador ( struct juegos &unJugador ) {
    cout << "\nponer saldo";
    cin >> unJugador.saldojugador;
    cin.sync(); // se llama para 'vaciar' el buffer
    cout << "\nponer nombre";
    //Si vamos usar c_string debemos tomar el nombre con funciones para cadenas de caracter del lenguaje C. Algunas 
    //de ellas pueden ser getline() fgets() entre otras, pero este scanf cuida para que no entre 
    //bazura en el buffer y cuida ademas el tamaño de la cadena para que no pase de 100 incluindo el \0 (NULO) que indica el fin de la cadena.
    scanf ("%99[^\n]%*c",unJugador.nombrejugador);
}
 
int main () {
    //Como ya creamos 'Jugador' antes solo pasamos a la variable. Se conectara con 'unJugador' y todo lo que le pase a 'unJugador' en realidad estará pasando a 'Jugador'.
    solicitarJugador(Jugador); // <-Como es una referencia se pasa como de una variable normal se tratará.
 
    //los cambios echos a 'unJugador' han sido aplicados a 'Jugador', solo hay que imprimir. 
    cout << "\nsu saldo es " << Jugador.saldojugador << "su nombre es " << Jugador.nombrejugador;
 
}
http://codepad.org/UuIl0p6c

Debes aprender la diferencia entre cadenas de caracteres y la clase string de C++, son 2 cosas diferentes pero ninguno carece de importancia.
También deberías aprender como funciona el buffer de entrada, ya que de no cuidarlo puedes almacenar basura, como por ejemplo cuando lees una cadena y pulsas enter. El enter es también un carácter, te puede producir muchos errores al leer cadenas. Hay varios sistemas y mecanismos para evitar que entren al buffer o incluso para remover dichos caracteres si no son deseados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

problema con void y struct

Publicado por javier (4 intervenciones) el 15/01/2015 02:53:05
muchas gracias vangodp, la verdad que me ha servido para entender como funciona todo lo que me has contado.

tengo que hacerte otra pregunta.

esta es una parte de un ejercicio u lo tengo partido en 3 archivos cpp con sus 3 header lo unico que para probar que funcionaba cada apartado tenia que ponerle un main.

ahora he cambiado de nombre a la funcion main y me ha quedado asi.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "jugador.h"
 
using namespace std;
void solicitarJugador ( struct juegos &unJugador ) {
    cout << "\nponer saldo";
    cin >> unJugador.saldojugador;
    cin.sync(); // se llama para 'vaciar' el buffer
    cout << "\nponer nombre";
    //Si vamos usar c_string debemos tomar el nombre con funciones para cadenas de caracter del lenguaje C. Algunas 
    //de ellas pueden ser getline() fgets() entre otras, pero este scanf cuida para que no entre 
    //bazura en el buffer y cuida ademas el tamaño de la cadena para que no pase de 100 incluindo el \0 (NULO) que indica el fin de la cadena.
    scanf ("%99[^\n]%*c",unJugador.nombrejugador);
}
 
int informacionjugador () {
    //Como ya creamos 'Jugador' antes solo pasamos a la variable. Se conectara con 'unJugador' y todo lo que le pase a 'unJugador' en realidad estará pasando a 'Jugador'.
    solicitarJugador(Jugador); // <-Como es una referencia se pasa como de una variable normal se tratará.
 
    //los cambios echos a 'unJugador' han sido aplicados a 'Jugador', solo hay que imprimir. 
    cout << "\nsu saldo es " << Jugador.saldojugador << "su nombre es " << Jugador.nombrejugador;
    system ("PAUSE");
 
}



y en el header he hecho lo siguiente.

1
2
3
4
5
6
7
8
9
10
11
#ifndef _JUGADOR_H_
#define _JUGADOR_H_
#include <cstdio>
#include <iostream>
int informacionjugador ();
struct juegos {
    char nombrejugador[100]; //debes reservar espacio para nombre ya que no se trata de una simple letra y si de una cadena de caracteres.
    long int saldojugador;
}; //<-aqui has creado un objeto del tipo juegos llamado jugador. si fuera un int seria: int Jugador; ...Pero recuerde que es: juego Jugador; ( Jugador es una variable(objeto) del tipo juego ;) )
struct juegos Jugador;
#endif


en la informacion que tengo del profesor nos dice que no hagamos includes de ficheros, por lo que he definido en el header la funcion informacionjugador.

y en el archivo main he puesto lo siguiente.

1
2
3
4
5
6
7
8
9
#include "jugador.h"
 
using namespace std;
 
int main (){
    cout <<"\nHola vas a jugar\n";
    system ("PAUSE");
 int informacionjugador ();
}

pregunta... lo estoy haciendo debidamente? soy newbie y todo se me hace un mundo. y me sale un fallo como multiple definition of Jugador first defined here, en la linea del archivo principal donde invoco la fiuncion.

vuelvo a darte las gracias, doy gracias a la gente que como tu nos ayuda a poder aprender. (y no ahorcarnos cualquier dia)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

problema con void y struct

Publicado por vangodp (287 intervenciones) el 15/01/2015 15:15:24
Esto es por que el guard no esta bien en jugador.h
te dejo el código correcto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//jugador.h
#ifndef JUGADOR_H
#define JUGADOR_H
 
#include <iostream>
#include <cstdio>
 
int informacionjugador ();
struct juegos {
    char nombrejugador[100];
    long int saldojugador;
};
 
struct juegos Jugador;
 
#endif // JUGADOR_H


Dime una cosa...¿Estas usando cual IDE? y tienes un proyecto o simplemente los archivos y nada mas?
Te dejo el que lo probé y si funciona. Quizás les debas a meter en un proyecto. Yo no lo he necesitado pero quien sabe XD
Yo uso codeblocks por si necesitas la info.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema con void y struct

Publicado por javi (4 intervenciones) el 15/01/2015 16:38:17
el IDE es dev c++, si tengo un proyecto pero con tu codigo sigue dandome el error de multiple definition of Jugador, first defined here
no se si es que el IDE sera muy porculero jajaja, estoy sufriendo para poder entregarlo a tiempo, sabes porque a ti te funciona y a mi me da ese error al compilar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

problema con void y struct

Publicado por vangodp (287 intervenciones) el 15/01/2015 21:43:40
haz una captura de pantalla o algo.

El error es por que se lo esta tomando que tiene definido 2 o mas cosas con el mismo nombre. Pero sin ver el error y saber que lineas y archivos dan problemas se me hace difícil.
haz una captura o pega el error aquí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema con void y struct

Publicado por javi (4 intervenciones) el 16/01/2015 13:19:49
tras lo que me dijistes saque del proyecto donde los tenia y si me funciona!!!!! estrañisimo la verdad, no lo entiendo y es una de las cosas que tendre que preguntar al profesor haber si sabe a que se debe, pero necesito correr que me he tirado mucho con este error. muchas gracias!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar