Oppure

Loading
26/10/14 21:49
pbe
Avendo un semplice programmino che chiede un numero intero in input:
#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?
aaa
27/10/14 7:43
TheDarkJuster
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: cplusplus.com/reference/cstdio/fread/
aaa
27/10/14 16:21
pbe
Provo e poi ti dico:k:
aaa
27/10/14 16:36
pbe
Ho implementato il codice avendo così:

#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ò:
c:\program files (x86)\dev-cpp\mingw32\include\stdio.h	[Note] expected 'const void *' but argument is of type 'int'

e
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?
aaa
27/10/14 16:44
TheDarkJuster
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 27/10/14 16:45
aaa
27/10/14 17:12
Ma... fwrite() non prende come terzo parametro la quantità degli elementi da scrivere?

#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?
27/10/14 17:59
pbe
Sì deve usare per forza un file su cui salvare con estensione .bin?
aaa
27/10/14 18:11
pbe
Grazie mille! Il codice di AldoBaldo funziona... ora mi leggo come usare fread() e poi se ho domande.
aaa