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;
}
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;
}