Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Salvare dati
Forum - C/C++ - Salvare dati

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 22:49
Domenica, 26/10/2014
Avendo un semplice programmino che chiede un numero intero in input:
Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.         int num;
  6.         printf("Inserisci un numero: ");
  7.         scanf("%d",&num);
  8.        
  9.         system("pause");
  10. }



Come faccio a salvare il numero inserito in un file che rimanga anche dopo lo spegnimento del pc?
Lo so che si usano le istruzioni fwrite e fread ma non le ho mai capite...
Chi è così gentile da spiegarmi?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 8:43
Lunedì, 27/10/2014
Codice sorgente - presumibilmente C/C++

  1. FILE* mioFile = fopen("numero.bin", "wb");
  2. fwrite(numero, sizeof( tipo_dinnumero ), sizeof ( numero ), mioFile);
  3. fclose(miofile);



con numero la tua variabile e tipo_di_numero il suo tipo, numero può anche essere un array:

unsigned long dati[10] {1, 6, 3, 9, 9, 4, 3, 5, 2, 2};

fwrite(dati, sizeof(unsigned long), sizeof(dati), mioFile);

ti lascio intuire il funzionamento di fread: http://www.cplusplus.com/reference/cstdio/fread/

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 17:21
Lunedì, 27/10/2014
Provo e poi ti dico:k:

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 17:36
Lunedì, 27/10/2014
Ho implementato il codice avendo così:

Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.         int num;
  6.         printf("Inserisci un numero: ");
  7.         scanf("%d",&num);
  8.        
  9.        
  10.         FILE* mioFile = fopen("numero.bin", "wb");
  11.         fwrite(num, sizeof(int), sizeof (num), mioFile);
  12.         fclose(mioFile);
  13.        
  14.         system("pause");
  15. }



Il programma viene compilato ma dopo avere inserito il valore della variabile nello scanf() mi va in crash.
Il file numero.bin viene creato però aprendolo con blocco note è vuoto.

Il compilatore mi da come avvertimenti però:
Codice sorgente - presumibilmente C/C++

  1. c:\program files (x86)\dev-cpp\mingw32\include\stdio.h  [Note] expected 'const void *' but argument is of type 'int'


e
Codice sorgente - presumibilmente C/C++

  1. C:\Users\utente\Documents\C-Project\save.c      [Warning] passing argument 1 of 'fwrite' makes pointer from integer without a cast [enabled by default]



Sbaglio a mettere int? Quale altro problema ci può essere?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:44
Lunedì, 27/10/2014
errore mio, scusa invece che num metti
(void*)(&num)
in fwrite e dimmi
se non va così metti solo &num e se non va mi dici che cerco meglio. Intanto che compilatore stai usando?

Ultima modifica effettuata da TheDarkJuster il 27/10/2014 alle 17:45
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:12
Lunedì, 27/10/2014
Ma... fwrite() non prende come terzo parametro la quantità degli elementi da scrivere?

Codice sorgente - presumibilmente C++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #define QUANTITA_DATI        1
  5.  
  6. int main() {
  7.     FILE *f = NULL;
  8.     int numero;
  9.  
  10.     /* chiede d'inserire il dato */
  11.     printf( "%s", "Inserisci un numero: " );
  12.     scanf( "%d", &numero );
  13.  
  14.     /* registra su file il dato inserito */
  15.  
  16.    /* apre il file */
  17.     f = fopen( "nomefile.bin", "wb" );
  18.     if( f == NULL ) exit(0);
  19.  
  20.     /* scrive il file */
  21.     /* (il terzo parametro e' 1 perche' scrive un solo elemento) */
  22.     fwrite( &numero, sizeof(int), QUANTITA_DATI, f );
  23.  
  24.     /* chiude il file */
  25.     fclose( f );
  26.     f = NULL;
  27.  
  28.     /* saluti e baci */
  29.     return 0;
  30. }



E' corretto così, no?

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 18:59
Lunedì, 27/10/2014
Sì deve usare per forza un file su cui salvare con estensione .bin?

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 19:11
Lunedì, 27/10/2014
Grazie mille! Il codice di AldoBaldo funziona... ora mi leggo come usare fread() e poi se ho domande.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:17
Lunedì, 27/10/2014
Già quindi era sizeof(num) / sizeof(tipo_di_num) l'esempio su cplusplus era forviante......

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo