Salve, ho scritto questo codice che teoricamente avrebbe dovuto salvare 3 struct in un file e poi avrebbe dovuto leggerle. Purtroppo gli output sono diversi da quelli sperati e non riesco a capirne i motivi.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
struct salvataggio{
char risposta[50];
bool pieno;
};
int main (){
FILE *fsave; //file dei salvataggi
int j; //numero dell'indice
struct salvataggio *salva=malloc(sizeof(struct salvataggio));
//prima struct
strcpy(salva->risposta,"ugo");//do un valore ai componenti della struct
salva->pieno=1;
fsave=fopen ("salvataggi", "wb");
fseek(fsave, 0*sizeof(salva), SEEK_SET); //metto il puntatore sulla prima struct
fwrite(salva, sizeof(struct salvataggio), 1, fsave);
fclose (fsave);
//seconda struct
strcpy(salva->risposta,"gigio");
salva->pieno=1;
fsave=fopen ("salvataggi", "wb");
fseek(fsave, 1*sizeof(salva), SEEK_SET);
fwrite(salva, sizeof(struct salvataggio), 1, fsave);
fclose (fsave);
//terza struct
strcpy(salva->risposta,"cavallo");
salva->pieno=1;
fsave=fopen ("salvataggi", "wb");
fseek(fsave, 2*sizeof(salva), SEEK_SET);
fwrite(salva, sizeof(struct salvataggio), 1, fsave);
fclose (fsave);
//lettura della prima struct
fsave=fopen ("salvataggi", "rb");
fseek(fsave, 0*sizeof(salva), SEEK_SET);
j=ftell(fsave)/sizeof(salva);
printf ("%d)", j+1);
fread(salva, sizeof(struct salvataggio), 1, fsave);
printf ("...%s...%d\n", salva->risposta, salva->pieno);
fclose (fsave);
//lettura della seconda struct
fsave=fopen ("salvataggi", "rb");
fseek(fsave, 1*sizeof(salva), SEEK_SET);
j=ftell(fsave)/sizeof(salva);
printf ("%d)", j+1);
fread(salva, sizeof(struct salvataggio), 1, fsave);
printf ("...%s...%d\n", salva->risposta, salva->pieno);
fclose (fsave);
//lettura della terza struct
fsave=fopen ("salvataggi", "rb");
fseek(fsave, 2*sizeof(salva), SEEK_SET);
j=ftell(fsave)/sizeof(salva);
printf ("%d)", j+1);
fread(salva, sizeof(struct salvataggio), 1, fsave);
printf ("...%s...%d\n", salva->risposta, salva->pieno);
fclose (fsave);
system("PAUSE");
return 0;
}
Io mi aspetto come output:
1)...ugo...1
2)...gigio...1
3)...cavallo...1
ma quelli che ottengo sono:
1)......58
2)......62
3)...cavallo...1
Ho notato che risulta giusto solo l'ultimo output. Infatti quando ho eliminato le parti di codice riguardanti la scrittura e la lettura della terza struct gli output sono stati:
1)......62
2)...gigio...1
Vi prego di darmi una mano.
Grazie in anticipo.