Oppure

Loading
25/11/12 18:51
andrea2012
ciao, sto cominciando adesso a studiare la programmazione in C;
trovo difficoltà a scrivere/leggere il file binario che contiene dei numeri casuali interi di cui si calcola media e deviazione;
vorrei sapere qual'è il modo corretto di scrivere la richiesta:
A è il vettore di interi, deviazione e media sono 2 float precedentemente calcolati;
dati.dat è il file che viene creato e letto, ma non mi restituisce i valori attesi;

//scrivo i valori su "dati.dat"
FILE *f2;
f2=fopen("dati.dat", "ab";);
/*si scrive sul file*/
if (f2){
fwrite(A,sizeof(A),n,f2);
fwrite(&media,sizeof(media),1,f2);
fwrite(&deviazione,sizeof(deviazione),1,f2);
fclose(f2);
}
else
printf("\nErrore nell'apertura del file dati.dat in fase di scrittura";);

//input da "dati.dat"
printf("\n\nInput da dati.dat\n";);
f2=fopen("dati.txt","rb";);
if (f2){
fread(A,sizeof(A),n,f2);
printf("I numeri sul file sono:\n";);
for (i=0;i<n;i++) printf(" %d ",A[i]);
fread(&media,sizeof(media),1,f2);
printf("\nMedia: %f\n",media);
fread(&deviazione,sizeof(deviazione),1,f2);
printf("Deviazione: %f\n",deviazione);
fclose(f2);
}
else
printf("\nErrore nell'apertura del file dati.txt in fase di input";);

sarei grato a chi mi volesse aiutare!
aaa
25/11/12 21:25
Bonny
fwrite (const void *ptr, size_t dim, size_t n, FILE *stream);
Scrive nel file n elementi ciascuno di dimensione pari a dim byte prelevandoli dall'area di memoria puntata da ptr.
nel tuo caso dim = sizeof(A | media | deviazione); invece nel primo caso l'array contiene n elementi di dimensione pari a sizeof(int)
nel secondo e terzo la dimensione è sizeof(float).
Ultima modifica effettuata da Bonny 25/11/12 21:26
aaa
26/11/12 15:13
andrea2012
Ti sarei grato se volessi correggere quello che ho scritto.
aaa
26/11/12 15:24
Bonny
Caspita un minimo di collaborazione....
/*Scrivo nel file n elementi ciascuno di dimensione pari a int (ovvero 2 o 4 byte dipende dal compilatore)
 prelevandoli dall'area di memoria puntata da A.*/
fwrite(A, sizeof(int), n, f2); 

/*Scrivo nel file 1 elemento ciascuno di dimensione pari a float (ovvero 4byte)
 prelevandoli dall'area di memoria puntata da &media.*/
fwrite(&media, sizeof(float), 1,f2); 

/*Scrivo nel file 1 elemento ciascuno di dimensione pari a float (ovvero 4byte)
 prelevandoli dall'area di memoria puntata da &deviazione.*/
fwrite(&deviazione,sizeof(float), 1,f2); 

Ultima modifica effettuata da Bonny 26/11/12 15:26
aaa
26/11/12 18:11
Poggi Marco
In realtà, l' ordine dei parametri passati a fwrite non è corretto: (cplusplus.com/reference/cstdio/fwrite/)

Inoltre, nella riapertura, è indicato un nome del file diverso da quello cerato.
aaa