Problema al usar el fread al leer vectores en una estructura

Iniciado por matilp, 22 Febrero 2017, 23:43 PM

0 Miembros y 1 Visitante están viendo este tema.

matilp

hola....quisiera que me ayuden a solucionar este problema ya que soy principiante y no tengo mucha idea de como resolverlo

este es el codigo:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct
{
char fabr[20],cod[7];
float pot,fre;
int stock;
int serie[20];
float precio[20];
}micro;

void lectura(micro *datos,int n){
int i,j;
FILE *archivo;
if((archivo=fopen("productos.bdd","rb"))==NULL){
puts("error");
exit(1);
}
for(i=0;i<n;i++)
{
    fread(&datos,sizeof(micro),1,archivo);
}

for(i=0;i<n;i++)
{
    puts(datos.fabr);
    puts(datos.cod);
    printf("potencia:%.1f\n",datos.pot);
    printf("frecuencia:%.1f\n",datos.pot);
    printf("stock:%d\n",datos.stock);
    for(j=0;j<datos.stock;j++){
        printf("serie:%d\n",datos.serie[j]);
        printf("precio:%.1f\n",datos.precio[j]);
    }
}
fclose(archivo);
}

la lectura de los datos la hace bien excepto por los vectores precio y serie que pone cualquier cosa...he probado muchas cosas pero no se como resolverlo. Creo que el error esta en como uso el fread.

pongo esta parte del codigo nada mas porque es la que me falla. Bueno desde ya muchas gracias

ivancea96

Este for no hace nada útil (si 'n' fuera 3, va a leer hasta 3 veces, pero solo va a guardar en datos el último que leyó)

for(i=0;i<n;i++)
{
    fread(&datos,sizeof(micro),1,archivo);
}


También, asegúrate de que los datos en el archivo son correctos. Es raro que solo lea así las matrices.

matilp

hola gracias por responder......ahi probe con esto:

fread(&datos,sizeof(micro),1,archivo);
while(!feof(archivo))
{
    i++;
    fread(&datos,sizeof(micro),1,archivo);
}


pero me sigue saliendo leyendo mal esa parte del archivo

ivancea96

Insisto, no te sirve de nada leer todos los registros del archivo sobre la misma variable. Al final, solo estás leyendo el último, tenlo en cuenta. Prueba a leer 1 y ver si sigue el error. Primero, depura el programa para el primero, y luego implementas el while/for.

matilp