Bennu Game Development

Foros en Español => Offtopic => Topic started by: Danielo515 on January 03, 2011, 06:44:29 AM

Title: ¿Por que da error esto?
Post by: Danielo515 on January 03, 2011, 06:44:29 AM
Me parece un programa demasiado simple como para fallar.

La primera vez que lo ejecuto no pasa nada,  pero a la segunda ya da error.

Está en c++

[code language="cpp"]#include<iostream>
#include<fstream>
#include<string>
using namespace std;

struct _soporte {
       long id_num;
       string titulo;
       //string autor;       

       };
       

void escribir();
void leer();


int main(){
   escribir();
   leer();
   
   getchar();
   
}

   
void escribir(){
     ofstream datos;
     _soporte libro;
     

     datos.open("datos.dat", ios::app|ios::binary);
     
     cout<<"Titulo: "<<endl;
     getline(cin, libro.titulo);
     
     libro.id_num=99;//datos.tellp();    //la id corresponde a la posición donde empieza el registro
     
     cout<<"Grabando: "<<libro.titulo<<" "<<libro.id_num<<endl;
     datos.write(reinterpret_cast<char *> (&libro),sizeof(_soporte));
     
     datos.close();
     
     }
     
     
void leer(){
     ifstream lee;
     _soporte libro;
     
     
     lee.open("datos.dat",ios::in|ios::binary);
   
     
     while(!lee.eof()){
             
             lee.read(reinterpret_cast<char *> (&libro),sizeof(_soporte));
             
             cout<<"ID: "<<libro.id_num<<endl;
             cout<<"Titulo:"<<libro.titulo<<endl;
             cout<<"pos: "<<lee.tellg()<<endl;
     }
     
     lee.close();
     
     }[/code]
Title: Re: ¿Por que da error esto?
Post by: FreeYourMind on January 03, 2011, 08:55:21 AM
Tienes todo el código ahí ? Puede ser porque no lo abres en modo lectura/escritura o que se quede pillado. Deberias probar sólo la de escribir 2 veces seguidas para intentar ver donde falla.
Title: Re: ¿Por que da error esto?
Post by: Danielo515 on January 03, 2011, 01:06:26 PM
Quote from: FreeYourMind on January 03, 2011, 08:55:21 AM
Tienes todo el código ahí ? Puede ser porque no lo abres en modo lectura/escritura o que se quede pillado. Deberias probar sólo la de escribir 2 veces seguidas para intentar ver donde falla.

Si, el programa es tan corto como ves, no hay más código ya que es una prueba precisamente de eso.

A que te refieres, a que escriba dos veces en una ejecución ¿no? vale, me pondré a ello a ver que pasa.
Title: Re: ¿Por que da error esto?
Post by: FreeYourMind on January 03, 2011, 02:10:42 PM
intenta probar sólo con la funcion escribir varias veces, si no falla entonces es la de lectura.
Title: Re: ¿Por que da error esto?
Post by: Danielo515 on January 03, 2011, 02:54:07 PM
El problema está, por lo visto, en que las strings son un tipo de puntero a char, y hay que hacer unas cuantas operaciones con ellas antes de grabar la estructura. Al grabar no da error, pero al leer si, claro.

Alguien sabe decirme como abrir un fichero para escribir al final,  y que la función que te dice la posición del puntero, funcione como dios manda?
Title: Re: ¿Por que da error esto?
Post by: Drumpi on January 03, 2011, 06:02:27 PM
¿Te refieres a FSEEK?

Lo poquísimo que he visto de ficheros en C es muy similar a Bennu, incluso se pueden usar las mismas funciones... o muy similares. Sin embargo yo vi los ficheros más a fondo en C++, usando las operaciones simillares a CIN y COUT (o sea, >> y <<, y puede que simplifique las cosas).

De todos modos, hasta donde sé, las strings no son un tipo de dato, son un puntero de tamaño INT a una cadena de bytes de tamaño variable, que se manejan usando unas funciones muy específicas. Nunca llegué a tener nivel para manejarlas, así que sienpre hemos usado arrays de CHAR (o listas enlazadas en su defecto).