Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Dimebag94

#1
Hola!!
Este es mi primer mensaje en el foro, les queria comentar que tengo un problema con C++ usando SDL. Estoy haciendo un juego en el que al final de una partida solicita las 3 iniciales y graba tus puntos en un archivo .DAT, para luego cuando se quiera entrar al menu de puntajes muestre los 5 mejores puntajes con sus respectivas iniciales. El problema esta en que luego de grabar el puntaje, si lo quiero leer hay una variable tipo String (que es la que muestra las 3 iniciales) que al hacer fread y guardarse en un objeto se vuelve loca y empieza a mostrar simbolos extraños en toda la consola.

Aqui estan las dos clases que manejan esto de los puntajes:

class Cadena
{
private:
   string cadena;
   SDL_Surface *nombre;
public:
   Cadena();
   ~Cadena();
   string getCadena() {return cadena;}
   void tomarIngreso();
   void Mostrar();
};

class Usuario
{
   private:
       Cadena nombre;
       int puntos;
       Tiempo juego;
       int minutos,segundos,tiempoInicial;
       bool nombreIngresado,gano;
   public:
       Usuario();
       void mostrarNombre();
       void procesarTiempoJuego();
       void mostrarTiempoJuego();
       void ingresarNombre();
       void mostrarPuntos();
       string getNombre() {nombre.getCadena();}
       void setTiempoInicial(int t) {tiempoInicial+=t;}
       int getTiempoRestante() {return tiempoInicial-juego.obtenerTiempo();}
       int getPuntos() {return puntos;}
       bool getGano() {return gano;}
       bool getNombreIngresado() {return nombreIngresado;}
       void setPuntos(int p) {puntos+=p;}
       int leerPuntaje(int);
       void pausarTiempoJuego() {juego.Pausar();}
       void reanudarTiempoJuego() {juego.sacarPausa();}
       bool grabarPuntaje();
};

Como veran la clase cadena esta dentro de las propiedades de la clase Usuario, la clase cadena es la que uso para escribir en pantalla las 3 iniciales y las guarda en un string para luego mostrarlas por pantalla en la clase Usuario. El problema llega cuando quiero hacer esto:

Usuario obj;
int pos=0;
   while(obj.leerPuntaje(pos)==1)
   {
       cout<<obj.getPuntos()<<endl; --->ESTE ANDA BIEN
       cout<<obj.getNombre()<<endl;---->ESTE ME MUESTRA SIMBOLOS EXTRAÑOS SIN PARAR Y MI PROGRAMA SE ROMPE
     
       pos++
   }

Si yo hago esto antes de grabarlo todo anda bien pero me da la sensacion de que el string no se esta grabando bien





Lo olvidaba aqui estan el leer y el grabar de la clase Usuario:

bool Usuario::grabarPuntaje()
{
    FILE *u;
    u=fopen(RUTAPUNTAJES,"ab");
    if(u==NULL)
    {
        cout<<"ERROR CON EL ARCHIVO DE PUNTAJES."<<endl;
        return false;
    }
    fwrite(this,sizeof *this,1,u);
    fclose(u);
    return true;
}

int Usuario::leerPuntaje(int pos)
{
    FILE *u;
    u=fopen(RUTAPUNTAJES,"rb");
    if(u==NULL)
    {
        cout<<"ERROR CON EL ARCHIVO DE PUNTAJES."<<endl;
        return 0;
    }
    int l;
    fseek(u,pos*sizeof *this,0);
    l=fread(this,sizeof *this,1,u);
    return l;
}