|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
[C] problemi con fwrite-fread
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!!! Codice:
#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;
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 121
|
ho risposto sull'altro thread.
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
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... |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 121
|
mh..
prova a sostiture questa linea: creati = fread( vettore, sizeof(vettore), (int)numero, input ); con creati = fread(vettore, sizeof(double), (int)numero, input); |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
hai ragione... refuso da prima!!!
grazie mille! ricordami che ti manderò un panettone per natale! ciao! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:20.



















