Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: matilp en 22 Febrero 2017, 23:43 pm



Título: Problema al usar el fread al leer vectores en una estructura
Publicado por: matilp en 22 Febrero 2017, 23:43 pm
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


Título: Re: Problema al usar el fread al leer vectores en una estructura
Publicado por: ivancea96 en 23 Febrero 2017, 12:27 pm
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ó)

Código
  1. for(i=0;i<n;i++)
  2. {
  3.    fread(&datos,sizeof(micro),1,archivo);
  4. }

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


Título: Re: Problema al usar el fread al leer vectores en una estructura
Publicado por: matilp en 23 Febrero 2017, 13:03 pm
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


Título: Re: Problema al usar el fread al leer vectores en una estructura
Publicado por: ivancea96 en 23 Febrero 2017, 15:10 pm
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.


Título: Re: Problema al usar el fread al leer vectores en una estructura
Publicado por: matilp en 23 Febrero 2017, 15:41 pm
dale ahora lo pruebo...muchas gracias por la ayuda!!