構造体を使用して、敵と味方のデータを簡単に変更できる様にするため、テキストファイルからデータを読込む そして、配布時にデータを変更されないように .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:ファイル操作で構造体をしよう…
>読込んでもらえません
各 freadの戻り値(読み込んだデータ数)を見るとわかりますが、0になっており、
全く読めていません。
理由は [color=#d0d0ff" face="monospace]fseek(fout_chara, -1L, SEEK_END) [/color]によってストリーム内のファイルの位置が最後の1つ前にあり、
更に countを読み込んだ後はファイルの一番最後を指している状態になっています。
この状態で count分の情報を読みとろうと思っても、もう読み込むものがありません。
なので、countを読み込んだ後、位置をファイルの先頭に戻しておく必要があります。
各 freadの戻り値(読み込んだデータ数)を見るとわかりますが、0になっており、
全く読めていません。
理由は [color=#d0d0ff" face="monospace]fseek(fout_chara, -1L, SEEK_END) [/color]によってストリーム内のファイルの位置が最後の1つ前にあり、
更に countを読み込んだ後はファイルの一番最後を指している状態になっています。
この状態で count分の情報を読みとろうと思っても、もう読み込むものがありません。
なので、countを読み込んだ後、位置をファイルの先頭に戻しておく必要があります。
Re:ファイル操作で構造体をしよう…
あと、/順番を逆にすると云々というのは、エネミーのバッファが数 (ENEMY_TOTAL)が3しかないのに
4つ分のデータを読みとっているのが原因ではないでしょうか。
4つ分のデータを読みとっているのが原因ではないでしょうか。