View Single Post
Old 04-02-2014, 20:14   #1
mirkus90
Member
 
L'Avatar di mirkus90
 
Iscritto dal: Oct 2007
Città: Monopoli(BA)
Messaggi: 218
C - problema scrittura/lettura file binari

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

Codice:
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
Codice:
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
Codice:
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????
__________________
NOSTRAVIS PRO CLASSEM - GrupAer -

Ultima modifica di mirkus90 : 04-02-2014 alle 20:27.
mirkus90 è offline   Rispondi citando il messaggio o parte di esso