ページ 11

ファイル操作で構造体をしよう…

Posted: 2007年8月21日(火) 22:01
by
構造体を使用して、敵と味方のデータを簡単に変更できる様にするため、テキストファイルからデータを読込む
そして、配布時にデータを変更されないように .dat ファイルとして保存してそれから読込むようにしようと考えてやっています。
.dat ファイルへの書き込みは character.cpp で成功していると思うのですが、読込んでもらえません。
読込み予定ファイルは、chara.dat enemy.dat です。
main.cppで	enemy_status(); と chara_status(); の順番を逆にすると表示がエラーになるのが関係しているのかもしれませんが、
そちらのエラーの原因も見つけることが出来ませんでした。

どうかよろしくお願いします。

--以下問題があると思われそうなところ--

--Save.cpp--内の関数(読込み処理を行っているところ)--
void Load_Every_Status()
{
	FILE *fout_chara, *fout_enemy;
	char r_f_c_name[/url] = "chara.dat";
	char r_f_e_name[/url] = "enemy.dat";
	int count;
	int i;

	if( (fout_chara = fopen(r_f_c_name, "r")) == NULL) {
		printf("キャラクターデータの読み込みに失敗しました。");
		exit(1);
	}
	if( (fout_enemy = fopen(r_f_e_name, "r")) == NULL) {
		printf("敵データの読み込みに失敗しました。");
		exit(1);
	}

	fseek(fout_chara, -1L, SEEK_END);
	fscanf(fout_chara, "%d", &count);
#if SAVE
	printf("c_count = %d\n",count);
#endif
	fread(C, sizeof(STATUS), count, fout_chara);

	fseek(fout_enemy, -1L, SEEK_END);
	fscanf(fout_enemy, "%d", &count);
#if SAVE
	printf("e_count = %d\n",count);
#endif
	fread(E, sizeof(STATUS), count, fout_enemy);

	fclose(fout_chara);
	fclose(fout_enemy);
}

Re:ファイル操作で構造体をしよう…

Posted: 2007年8月21日(火) 22:39
by Justy
読込んでもらえません
 各 freadの戻り値(読み込んだデータ数)を見るとわかりますが、0になっており、
全く読めていません。

 理由は [color=#d0d0ff" face="monospace]fseek(fout_chara, -1L, SEEK_END) [/color]によってストリーム内のファイルの位置が最後の1つ前にあり、
更に countを読み込んだ後はファイルの一番最後を指している状態になっています。
 この状態で count分の情報を読みとろうと思っても、もう読み込むものがありません。

 なので、countを読み込んだ後、位置をファイルの先頭に戻しておく必要があります。

Re:ファイル操作で構造体をしよう…

Posted: 2007年8月21日(火) 22:59
by Justy
 あと、/順番を逆にすると云々というのは、エネミーのバッファが数 (ENEMY_TOTAL)が3しかないのに
4つ分のデータを読みとっているのが原因ではないでしょうか。

Re:ファイル操作で構造体をしよう…

Posted: 2007年8月22日(水) 05:44
by
ご回答ありがとうございます。

言われている通り治したところうまくいきました。
本当にありがとうございました。