Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - scrittura e lettura di un file binario
Forum - C/C++ - scrittura e lettura di un file binario

Avatar
andrea2012 (Normal User)
Newbie


Messaggi: 2
Iscritto: 19/11/2012

Segnala al moderatore
Postato alle 19:51
Domenica, 25/11/2012
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);
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!

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 22:25
Domenica, 25/11/2012
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 il 25/11/2012 alle 22:26


Bonny
PM Quote
Avatar
andrea2012 (Normal User)
Newbie


Messaggi: 2
Iscritto: 19/11/2012

Segnala al moderatore
Postato alle 16:13
Lunedì, 26/11/2012
Ti sarei grato se volessi correggere quello che ho scritto.

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 16:24
Lunedì, 26/11/2012
Caspita un minimo di collaborazione....
Codice sorgente - presumibilmente C#

  1. /*Scrivo nel file n elementi ciascuno di dimensione pari a int (ovvero 2 o 4 byte dipende dal compilatore)
  2.  prelevandoli dall'area di memoria puntata da A.*/
  3. fwrite(A, sizeof(int), n, f2);
  4.  
  5. /*Scrivo nel file 1 elemento ciascuno di dimensione pari a float (ovvero 4byte)
  6.  prelevandoli dall'area di memoria puntata da &media.*/
  7. fwrite(&media, sizeof(float), 1,f2);
  8.  
  9. /*Scrivo nel file 1 elemento ciascuno di dimensione pari a float (ovvero 4byte)
  10.  prelevandoli dall'area di memoria puntata da &deviazione.*/
  11. fwrite(&deviazione,sizeof(float), 1,f2);


Ultima modifica effettuata da Bonny il 26/11/2012 alle 16:26


Bonny
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:11
Lunedì, 26/11/2012
In realtà, l' ordine dei parametri passati a fwrite non è corretto: (http://www.cplusplus.com/reference/cstdio/fwrite/)

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


Nulla va più veloce della luce, quindi rilassati.
PM Quote