Anuncios Google

Problemas al leer un archivo binario

Buenas, tengo un trabajillo para la uni que consiste en hacer una especie de gestoría de biblioteca.

 

En unos de los apartados, me piden calcular el precio entre unas determinada fechas y guardalos en un archivo binario:

 

ofstream Buffer;
     Buffer.open(BUFFER.c_str()); // Nombre del archivo predefinido en la constante BUFFER
 
     for (int i = 0; i < elementos; i++)
         if (ComprobarFecha(Libro,Leidas[1],Leidas[0],i,elementos))
         {
              Buffer.write((char *)&Libro[i].Precio,sizeof(int)); // Guardamos precio
              Buffer.write((char *)&Libro[i].Fecha.Dia,sizeof(fecha)); // Guardamos fecha
              contador++;
         }
 
     Buffer.close();
 
     // Enunciado: CIV (obtener el precio total y medio de los libros encontrados)
 
     ifstream CargarDatos;
     CargarDatos.open(BUFFER.c_str());
 
     // Reseteamos variables
 
     Min = 0;
     Max = 0;
     contador = 0;
 
     // Empezamos a leer
 
     while(!CargarDatos.eof())
     { 
              CargarDatos.read((char *)&Datos[contador],sizeof(int)); // Leemos precio
              Max += Datos[contador]; // Vamos calculando el precio total...
              CargarDatos.read((char *)&Leidas[contador],sizeof(fecha)); // Leemos la fecha
              contador++; // Añadimos un libro mas leido
     }
 
     CargarDatos.close();
 
     // Cuando terminamos, mostramos la informacion
 
     cout<<endl<<"El precio total de los libros entre las dos fechas es de "<<Max<<"$ con un precio medio de ";
     cout<<Max/contador<<"$/Libro. Hay una cantidad de "<<contador<<" libros";

 

Al probarlo, me aparece que los libros son 21 (correcto) y que su precio es de 5547734745... Un disparate vamos xD

 

 

 

Las estructuras son:

 

struct fecha
{
       int Anyo,Mes,Dia;
};
 
struct Biblioteca
{
       string Titulo, Autor;
       float Precio;
       bool Prestado;
       fecha Fecha;
};

 

Las variables de esta funcion son:

 

int Max = 0; 
     int Min = 0;
     int contador = 0;
     int Datos[elementos]; 
     fecha Leidas[elementos];
     Biblioteca Libro[elementos];


Editado: El límite del ancho de las imágenes es de 500 pixeles, sobrepasar este límite puede descolocar la web e incumple las Normas de la Comunidad, antes de volver a postear por favor revíselas.| AORV


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de moikop

Precio es float, pero lo

Precio es float, pero lo tratas como int?
Probá a cambiarle el tipo de Max a float (ya que veo que hay algunos precios que llevan decimales...)


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

En efecto, era eso. Mira

En efecto, era eso. Mira que...

 

Gracias!!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.