mirkus90
04-02-2014, 19:14
salve ragazzi...ho qualche problemino con la scrittura e lettura di un file binario. ciņ che accade č che quando vado a leggere una delle due strutture che scrivo non rappresenta ciņ che voglio ma presenta alcune variazioni a livello di codice ascii (ovvero spara un po di simboli e cifre a caso).
queste sono le strutture che utilizzo
typedef struct t_gioco{
int tabella_gioco[NUMERO_RIGHE*NUMERO_COLONNE];
int pips_1;
int score_1;
int pips_2;
int score_2;
char giocatore_1[12];
char giocatore_2[12];
int posta;
int primo_giocatore;
int dado_1;
int dado_2;
}gioco;
typedef struct t_partita{
gioco partita;
char nome_partita[12];
}partita;
questo č il codice (anche se statico) utilizzato per inizializzare e scrivere
void creafile(){
int k=0;
int i=0;
partita vet[30];
strcpy(vet[0].nome_partita,"mirko");
strcpy(vet[1].nome_partita,"marta");
strcpy(vet[2].nome_partita,"meli");
strcpy(vet[3].nome_partita,"puffo");
strcpy(vet[4].nome_partita,"abra");
strcpy(vet[5].nome_partita,"vince");
strcpy(vet[6].nome_partita,"bella");
strcpy(vet[7].nome_partita,"brutta");
strcpy(vet[8].nome_partita,"caspita");
strcpy(vet[9].nome_partita,"mela");
strcpy(vet[10].nome_partita,"toc");
strcpy(vet[11].nome_partita,"pop");
strcpy(vet[12].nome_partita,"abba");
strcpy(vet[13].nome_partita,"pippo");
strcpy(vet[14].nome_partita,"papa");
strcpy(vet[15].nome_partita,"trullo");
strcpy(vet[16].nome_partita,"mamma");
strcpy(vet[17].nome_partita,"paperino");
strcpy(vet[18].nome_partita,"cavallo");
strcpy(vet[19].nome_partita,"cane");
strcpy(vet[20].nome_partita,"lucky");
strcpy(vet[21].nome_partita,"bricciola");
strcpy(vet[22].nome_partita,"ragno");
strcpy(vet[23].nome_partita,"guitar");
strcpy(vet[24].nome_partita,"naspo");
strcpy(vet[25].nome_partita,"atlantis");
strcpy(vet[26].nome_partita,"homer");
strcpy(vet[27].nome_partita,"bart");
strcpy(vet[28].nome_partita,"marge");
strcpy(vet[29].nome_partita,"steve");
while(i<30){
vet[i].partita.dado_1=3;
vet[i].partita.dado_2=4;
vet[i].partita.pips_1=111;
vet[i].partita.pips_2=222;
vet[i].partita.posta=33;
vet[i].partita.primo_giocatore=2;
vet[i].partita.score_1=1234;
vet[i].partita.score_2=23;
strcpy(vet[i].partita.giocatore_1,"ciccio");
strcpy(vet[i].partita.giocatore_2,"pipp");
k=0;
while(k<182){
vet[i].partita.tabella_gioco[k]=VUOTO;
k++;
}
i++;
}
FILE* scrittura;
scrittura=fopen("file_salvataggio.bin","wb");
i=0;
while(i<30){
fwrite(&vet[i],sizeof(partita),1,scrittura);
i++;
}
fclose(scrittura);
return;
}
e questo č ciņ che utilizzo per leggere
void caricare_partita(){
partita partite_presenti[30];
FILE* lista_lettura;
lista_lettura=fopen("file_salvataggio.bin","rb");
int i=0;
while(i<30){
fread(&partite_presenti[i], sizeof(partita), 1, lista_lettura);
i++;
}
fclose(lista_lettura);
...
...
...
Dopo la lettura quando richiamo ad esempio vet[2].nome_partita non mi da nessun problema e mi rappresenta realmente ciņ che ho salvato precedentemente, mentre quando chiamo vet[xx].partita fa il casino.
come mai?? mi sapreste aiutare???? :muro: :muro: :muro:
queste sono le strutture che utilizzo
typedef struct t_gioco{
int tabella_gioco[NUMERO_RIGHE*NUMERO_COLONNE];
int pips_1;
int score_1;
int pips_2;
int score_2;
char giocatore_1[12];
char giocatore_2[12];
int posta;
int primo_giocatore;
int dado_1;
int dado_2;
}gioco;
typedef struct t_partita{
gioco partita;
char nome_partita[12];
}partita;
questo č il codice (anche se statico) utilizzato per inizializzare e scrivere
void creafile(){
int k=0;
int i=0;
partita vet[30];
strcpy(vet[0].nome_partita,"mirko");
strcpy(vet[1].nome_partita,"marta");
strcpy(vet[2].nome_partita,"meli");
strcpy(vet[3].nome_partita,"puffo");
strcpy(vet[4].nome_partita,"abra");
strcpy(vet[5].nome_partita,"vince");
strcpy(vet[6].nome_partita,"bella");
strcpy(vet[7].nome_partita,"brutta");
strcpy(vet[8].nome_partita,"caspita");
strcpy(vet[9].nome_partita,"mela");
strcpy(vet[10].nome_partita,"toc");
strcpy(vet[11].nome_partita,"pop");
strcpy(vet[12].nome_partita,"abba");
strcpy(vet[13].nome_partita,"pippo");
strcpy(vet[14].nome_partita,"papa");
strcpy(vet[15].nome_partita,"trullo");
strcpy(vet[16].nome_partita,"mamma");
strcpy(vet[17].nome_partita,"paperino");
strcpy(vet[18].nome_partita,"cavallo");
strcpy(vet[19].nome_partita,"cane");
strcpy(vet[20].nome_partita,"lucky");
strcpy(vet[21].nome_partita,"bricciola");
strcpy(vet[22].nome_partita,"ragno");
strcpy(vet[23].nome_partita,"guitar");
strcpy(vet[24].nome_partita,"naspo");
strcpy(vet[25].nome_partita,"atlantis");
strcpy(vet[26].nome_partita,"homer");
strcpy(vet[27].nome_partita,"bart");
strcpy(vet[28].nome_partita,"marge");
strcpy(vet[29].nome_partita,"steve");
while(i<30){
vet[i].partita.dado_1=3;
vet[i].partita.dado_2=4;
vet[i].partita.pips_1=111;
vet[i].partita.pips_2=222;
vet[i].partita.posta=33;
vet[i].partita.primo_giocatore=2;
vet[i].partita.score_1=1234;
vet[i].partita.score_2=23;
strcpy(vet[i].partita.giocatore_1,"ciccio");
strcpy(vet[i].partita.giocatore_2,"pipp");
k=0;
while(k<182){
vet[i].partita.tabella_gioco[k]=VUOTO;
k++;
}
i++;
}
FILE* scrittura;
scrittura=fopen("file_salvataggio.bin","wb");
i=0;
while(i<30){
fwrite(&vet[i],sizeof(partita),1,scrittura);
i++;
}
fclose(scrittura);
return;
}
e questo č ciņ che utilizzo per leggere
void caricare_partita(){
partita partite_presenti[30];
FILE* lista_lettura;
lista_lettura=fopen("file_salvataggio.bin","rb");
int i=0;
while(i<30){
fread(&partite_presenti[i], sizeof(partita), 1, lista_lettura);
i++;
}
fclose(lista_lettura);
...
...
...
Dopo la lettura quando richiamo ad esempio vet[2].nome_partita non mi da nessun problema e mi rappresenta realmente ciņ che ho salvato precedentemente, mentre quando chiamo vet[xx].partita fa il casino.
come mai?? mi sapreste aiutare???? :muro: :muro: :muro: