PDA

View Full Version : [C] problemi con fwrite-fread


andreapav
01-10-2008, 10:16
ciao a tutti! avrei un problema su un programmino che in teoria più banale non si può ma non mi funziona...

devo creare un file che contiene dei double generati a caso... il problema è che credo anche li crei (creati mi da sempre 100) ma poi quando li legge non sempre riesce a leggerli tutti e 100... non capisco perchè!!!

NB: vabbè in realtà creo un file con 101 elementi dove il primo è il numero di dati ma non è granchè importante...

vi piazzo qua il listato...vedete se riuscite a trovare l'errore...non ne vengo più fuori!!!


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

FILE *file, *input;

int main( int argc, char** argv )
{
char* nomefile;
double numero;
double *vettore;
int total_size;
int i,n;
int creati;

nomefile = "input.dat";
total_size = 100;

/*Scrivi file*/

srand((int)time(NULL));
file = fopen( nomefile, "w" );
if ( file == NULL )
{
printf( "Impossibile creare il file!" );
exit( 1 );
}
/*scrivo l'header*/
numero = (double)total_size;
creati = fwrite( &numero, sizeof(numero), 1, file );
for( i=0; i < total_size; i += 1 )
{
numero = (double)rand();
printf("%d - %f ",i , numero);
creati = fwrite( &numero, sizeof(numero), 1, file );
printf("(%d) \n",creati);
}
n = fclose( file );
printf("file creato con %d valori \n",i);


/*Leggi file*/

input = fopen( nomefile, "r" );
printf("file: %d \n",file);
printf("input: %d \n",input);

if( input == NULL )
{
printf( "Impossibile aprire il file\n");
exit( 1 );
}

n = 0;
/*leggo header*/
creati = fread( &numero, sizeof(double), 1, input );
printf( "header: file scritti %6.3f \n", numero);
vettore = (double*)malloc((int)numero*sizeof(double));
creati = fread( vettore, sizeof(vettore), (int)numero, input );

fclose( input );

printf("letti: %d",creati);

return 0;
}

IceCoder
01-10-2008, 10:18
ho risposto sull'altro thread. ;)

andreapav
01-10-2008, 10:29
ti ho ringraziato di la... se chiudono quella discussione però perchè manca l'indicazione C copio la soluzione: basta sostituire w con wb e r con rb in mode di fopen...

...adesso però li sto stampando e me ne stampa mezzi giusti (fino al 50esimo) e gli altri sballa...come mai? se li legge tutti...

IceCoder
01-10-2008, 10:35
mh..

prova a sostiture questa linea:

creati = fread( vettore, sizeof(vettore), (int)numero, input );

con

creati = fread(vettore, sizeof(double), (int)numero, input);

andreapav
01-10-2008, 10:38
hai ragione... refuso da prima!!!
grazie mille! ricordami che ti manderò un panettone per natale!
ciao!