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
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.
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
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.
dale ahora lo pruebo...muchas gracias por la ayuda!!