以下がそのソースなんですが
char replay_name[64];
for(i=0;i<20;i++){
memset(replay_name,0,sizeof(char));
sprintf(replay_name,"media/replay/replay%d.dat",i+1);
FILE *fp;
if((fp=fopen(replay_name,"rb"))==NULL){//ファイルが無かったら
//printfDx("ファイルオープンエラー\n");
replay_game_mode=-1;//難易度情報に-1を入れる
//break;
fclose(fp);
}
if((fp=fopen(replay_name,"rb"))!=NULL){//あったら
fread( replay_info, sizeof(unsigned char),10,fp);
fread( &replay, sizeof(replay_t), 1, fp ) ;
fread( replay_save_key, sizeof(unsigned char), REPLAY_MAX_TIME, fp );
fclose( fp );
replay_game_mode=replay_info[4];//難易度情報にリプレイの難易度情報を入れる
}
}というようにファイルを開くと、ファイルが無い場合の処理は上手くいくのですが、ファイルがある場合、番号が存在するファイルの中で一番大きいファイル(replay1.dat,replay3.dat,replay15.datがある場合はreplay15.dat、一番最後に開かれたファイル?)の情報が存在しているファイルの番号のreplay_game_mode全てに入れられてしまいます。
すごくわかりにくくてすいません・・・
それで、ソースコードを以下のように書き換えました
for(i=0;i<20;i++){
memset(replay_name,0,sizeof(char));
sprintf(replay_name,"media/replay/replay%d.dat",i+1);
FILE *fp = fopen( replay_name, "rb" );
if(!fp){
replay_game_mode=-1;
fclose(fp);
}else{
fread( replay_info, sizeof(unsigned char),10,fp);
fread( &replay, sizeof(replay_t), 1, fp ) ;
fread( replay_save_key, sizeof(unsigned char), REPLAY_MAX_TIME, fp );
fclose( fp );
replay_game_mode=replay_info[4];
}
}このようにしたところ、しっかり番号通りのreplay_game_modeに、対応した番号のリプレイファイルの難易度情報が入れられました。
ただ最初と変えた後とでやってる事は変わらないように思えるのですが、どこにどう違いがあるのでしょうか?
正しい処理は出来るようになったのですが原因がわからないので不安です
状況が分かりづらくてすいません
どなたかご教授よろしくお願いします。
環境はWindousXP
BorlandC++でBCCDeveropperを使っています
DXライブラリを使っています
