Saludos al foro
haciendo mis practicas en C, he realizado un programa que Graba y lee una matriz de 25 enteros, la grabación con fwrite() es OK, pero al leer el archivo con fread() solo me recupera 12 de los 25 elementos grabados.
ret
= fwrite(&matriz
, object_size
, object_count
, flujo
); //OK "ret" devuelve 25
ret
= fread(&matriz
, object_size
, object_count
, flujo
); //FALLO "ret" devuelve 12
fread me devuelve el numero de objetos grabados (en "ret"); Este valor debe a su vez debe coincidir con object_count que es 25, igual que en fwrite.
matriz grabada ---> matriz leida
2 4 6 8 10 ---> 2 4 6 8 10
12 14 16 18 20 ---> 12 14 16 18 20
22 24 26 28 30 ---> 22 24 0 0 0
32 34 36 38 40 ---> 0 0 0 0 0
42 44 46 48 50 ---> 0 0 0 0 0
Detalles Sistema
SO: Windows XP, Compilador: gcc 4.5.2 (MinGW)
codigo completo
int fila, col;
int matriz[5][5]={
2,4,6,8,10,
12,14,16,18,20,
22,24,26,28,30,
32,34,36,38,40,
42,44,46,48,50
};
int main(){
FILE *flujo;
int close_error;
char archivo[]="numbers.dat";
size_t object_size = sizeof(int);
size_t object_count = 25;
size_t ret;
/*Valores Iniciales*/
imprime_matriz();
flujo
= fopen(archivo
, "w"); ret
= fwrite(&matriz
, object_size
, object_count
, flujo
); printf("elementos grabados %dn", ret
); if (ret != object_count)
printf("Error al excribir datos al archivon"); /*VACIAMOS LA MATRIZ A CEROS*/
for (fila = 0; fila <= 4; fila++){
for(col=0; col <= 4; col++){
matriz[fila][col]=0;
}
}
/*LEEMOS EL ARCHIVO*/
flujo
= fopen(archivo
, "r"); ret
= fread(&matriz
, object_size
, object_count
, flujo
); printf("elementos retornados %dn", ret
); if (ret != object_count)
printf("Error leyendo data desde archivo...!n");
imprime_matriz(&matriz);
return 0;
}
void imprime_matriz(){
for (fila =0; fila<=4 ; fila++){
for (col=0; col<=4; col++)
printf("%d ", matriz
[fila
][col
]); }
}