pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Avendo un semplice programmino che chiede un numero intero in input:
Codice sorgente - presumibilmente C/C++ |
#include <stdio.h>
main()
{
int num;
printf("Inserisci un numero: ");
scanf("%d",&num);
system("pause");
}
|
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?
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Codice sorgente - presumibilmente C/C++ |
FILE* mioFile = fopen("numero.bin", "wb");
fwrite(numero, sizeof( tipo_dinnumero ), sizeof ( numero ), mioFile);
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/
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Provo e poi ti dico
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Ho implementato il codice avendo così:
Codice sorgente - presumibilmente C/C++ |
#include <stdio.h>
main()
{
int num;
printf("Inserisci un numero: ");
scanf("%d",&num);
FILE* mioFile = fopen("numero.bin", "wb");
fwrite(num, sizeof(int), sizeof (num), mioFile);
fclose(mioFile);
system("pause");
}
|
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++ |
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++ |
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? |
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
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 |
|
()
Newbie
Messaggi:
Iscritto:
|
Ma... fwrite() non prende come terzo parametro la quantità degli elementi da scrivere?
Codice sorgente - presumibilmente C++ |
#include <stdlib.h> #include <stdio.h> #define QUANTITA_DATI 1 int main() { FILE *f = NULL; int numero; /* chiede d'inserire il dato */ printf( "%s", "Inserisci un numero: " ); scanf( "%d", &numero ); /* registra su file il dato inserito */ /* apre il file */ f = fopen( "nomefile.bin", "wb" ); if( f == NULL ) exit(0); /* scrive il file */ /* (il terzo parametro e' 1 perche' scrive un solo elemento) */ fwrite( &numero, sizeof(int), QUANTITA_DATI, f ); /* chiude il file */ fclose( f ); f = NULL; /* saluti e baci */ return 0; }
|
E' corretto così, no?
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Sì deve usare per forza un file su cui salvare con estensione .bin?
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Grazie mille! Il codice di AldoBaldo funziona... ora mi leggo come usare fread() e poi se ho domande.
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Già quindi era sizeof(num) / sizeof(tipo_di_num) l'esempio su cplusplus era forviante......
|
|