Oppure

Loading
22/09/12 17:19
Ho un array di strutture che contengono due campi:

struct HighPos {
	char Name[6]; // 5 Chars + 'Ho un array di strutture che contengono due campi:


struct HighPos {
	char Name[6]; // 5 Chars + '{parsed_message}'
	int Score;
};

HighPos HScore[10];


E un file che contiene i dati in modo seriale, come posso leggerlo?

Ho già provato a leggerlo con le stream facendo un cast dell'array, ma la lettura termina dopo il primo nome in quanto trova un carattere 0.

Qualcuno sa come leggerlo?

Grazie' int Score; }; HighPos HScore[10];


E un file che contiene i dati in modo seriale, come posso leggerlo?

Ho già provato a leggerlo con le stream facendo un cast dell'array, ma la lettura termina dopo il primo nome in quanto trova un carattere 0.

Qualcuno sa come leggerlo?

Grazie
22/09/12 18:08
Puoi semplicemente usare

	FILE *fh = fopen("file", "rb");
	fread(HScore, sizeof(struct HighPos), 10, fh);
	fclose(fh);


ma poi controlla il risultato, elemento per elemento, perché potresti avere problemi a seconda dell'allineamento usato (pack)
24/09/12 14:20
Funziona, Grazie, ma non riesco a salvarlo alla chiusura:

HighScoreClass::~HighScoreClass() {
	FILE *fh;
	if(!fopen_s(&fh, "HS.dat", "wb")) {
		fwrite(HScore, sizeof(struct HighPos), NScores, fh);
		fclose(fh);
	}
}


Metto un breakpoint e non si ferma mai, allora ho pensato di eliminare l'oggetto esplicitemente prima di terminare il programma con: delete HighScore; in debug mi passa per il delete, ma non per il distruttore e in relase dice che non ha compilato l'istruzione delete...

Uso VC++ 2010 se può essere utile... non capisco perchè non va....
24/09/12 17:56
Puoi mostrare la parte del main coinvolta e la classe ?
25/09/12 14:38
Main:

void finalize(void) {
	if(cScene) cScene->finalize();
	Global->finalize();
	finalizeScenes(); // Vedi Sotto
	if(timer)		al_destroy_timer(timer);
	if(display)		al_destroy_display(display);
	if(event_queue)	al_destroy_event_queue(event_queue);
}

int main(int argc, char* argv[]) {
	init();
	game_loop();
	finalize();
}


La classe:

extern Scene *HighScore;

class HighScoreClass: public Scene {
public:
	HighScoreClass();
	void draw_front();
	void input(ALLEGRO_EVENT event);
	~HighScoreClass();
};


Inizializza e finalizza Scene:

void initScenes() {
	Global = new GlobalClass();
	Menu = new MenuClass();
	HighScore = new HighScoreClass();
	Game = new GameClass();
}

void finalizeScenes() { // Finalizza Scene
	delete Global;
	delete Menu;
	delete HighScore; // Questo non viene compilato in modalità Relase, ma in debug viene eseguito
	delete Game;
}


E anche se quello sopra viene eseguito, non entra nel distruttore dell'oggetto:

HighScoreClass::~HighScoreClass() { // Non compilato e non eseguito in Relase, compilato, MA NON eseguito, in Debug
	FILE *fh;
	if(!fopen_s(&fh, "HS.dat", "wb")) {
		fwrite(HScore, sizeof(struct HighPos), NScores, fh);
		fclose(fh);
	}
	if(HSFont)	al_destroy_font(HSFont);
	if(hs)		al_destroy_bitmap(hs);
}
Ultima modifica effettuata da 25/09/12 14:40