migliorabile ha scritto:
Direi che ci sei.
wow.. Ora, ultimo "piccolo problema". Alla fine di una mano chiedo se salvare la partita(dati giocatori, mazzo e mazzo di carte usate) tramite la funzione
save su un file ad accesso casuale. Il salvataggio sembra che vada a buon fine, però quando vado a richiamare la partita con
load mi da valori completamente sballati. Numel è uguale a 2 e lo salvo qui in save:
void Save(List_utente *list,Mazzo *mazzo,Mazzo *mazzo_old)
{
FILE *f;
El_list_utente *tmp = list->inizio;
f = fopen(FILENAME,"wb");
if(f == NULL)
printf("Impossibile salvare il file...\n");
else{
[b]//Salvo il numero di giocatori
fwrite(&list->numel,sizeof(int),1,f);[/b]
//Salvo i giocatori
while(tmp!=NULL)
{
fwrite(&tmp->el,sizeof(Utente),1,f);
tmp = tmp->next;
}
fwrite(mazzo,sizeof(Mazzo),1,f);
fwrite(mazzo_old,sizeof(Mazzo),1,f);
fclose(f);
printf("Partita salvata correttamente...\n");
}
}
ma quando lo richiamo in load e lo stampo per fare la verifica mi da un numero nell'ordine dei milioni, com'è possibile???
void Load(List_utente *list,Mazzo *mazzo,Mazzo *mazzo_old)
{
FILE *f;
El_list_utente *tmp = list->inizio;
Utente utente;
int i,n;
char c;
f = fopen(FILENAME,"rb");
if(f == NULL)
printf("Impossibile aprire il file...\n");
[b]if(fread(&n,sizeof(int),1,f) == 0)
printf("Numero di elementi uguale a 0...\n");
else
{
printf("Elementi caricati: %d", &n);[/b]
Pausa();
for(i=0;i<n;i++)
{
if(fread(&utente,sizeof(Utente),1,f) == 0)
printf("Impossibile leggere i dati del giocatore...\n");
else{
printf("Giocatore letto...\n");
printf("%s%d", &utente.nome, &utente.soldi);
/*while (!feof(f)){
printf("%s%d",utente.nome,utente.soldi);
fread(&utente,sizeof(Utente),1,f);
while((c = getchar()) != '\n' && c != EOF);
Pausa();
}*/
while((c = getchar()) != '\n' && c != EOF);
Pausa();
AggiungiGiocatoreInCoda(list,&utente);
printf("Giocatore caricato in lista...\n");
}
}
if(fread(mazzo,sizeof(Mazzo),1,f) == 0)
printf("Impossibile leggere il mazzo...\n");
if(fread(mazzo_old,sizeof(Mazzo),1,f) == 0)
printf("Impossibile leggere il mazzo usato...\n");
fclose(f);
printf("File caricato correttamente...\n");
}
}