セーブしようと下のプログラムを書いたのですが、if(fp == NULL)の項に入ってしまい、セーブすることが出来ません。何が原因でしょうか?
C++
1void kakikomi(int a,int b,int c) { 2 3 FILE* fp; 4 fopen_s(&fp, "セーブデータ.dat", "rb"); 5 if (fp == NULL) { 6 bug(); 7 } 8 fread(&Data, sizeof(Data), 1, fp); 9 fclose(fp); 10 11 fopen_s(&fp, "セーブデータ.dat", "wb"); 12 13 if (fp == NULL) { 14 bug(); 15 } 16 17 if (fp != NULL && c == -1) { 18 Data = { a,b,Data.svwin }; 19 fwrite(&Data, sizeof(SaveData_t), 1, fp); 20 } 21 22 if (fp != NULL && a == 2) { 23 Data = { Data.svgide,Data.svmusic,Data.svwin + 1 }; 24 fwrite(&Data, sizeof(Data), 1, fp); 25 } 26 fclose(fp); 27}
bug()は、画面上に「申し訳ございませんが、ファイルを読み取れませんでした」と表示する為のvoidです。
ちなみに、このプログラムの全容は以下のように説明できます。
ゲームの設定画面などからセーブデータ(ゲーム開始時にルール説明は必要か、BGMは必要か、今まで何勝したか)に変更があったときに、呼び出される
↓
まずは今までのセーブデータを読み取る
↓
変更が必要な変数のみ変更する(例えば、設定画面からは「今まで何勝したか」を変更する必要は無いため、int cは-1が届き、svwinは変更されない)
↓
変更を保存する
自分で調べたこと
読み取りモード"rb"を用いたfopen_s(&fp, "セーブデータ.dat", "rb")ではファイルが生成されないことを知ったので、ゲーム開始時にファイルがないときは生成させる為のプログラムを作りました。
でもこれを使っても、まだfp == NULLのままです。
C++
1void startfile() { 2 FILE* fp; 3 FILE* fp2; 4 fopen_s(&fp, "セーブデータ.dat", "rb"); 5 if (fp == NULL) { 6 fopen_s(&fp2, "セーブデータ.dat", "wb"); 7 Data = { 0,0,0 }; 8 fwrite(&Data, sizeof(Data), 1, fp2); 9 fclose(fp2); 10 } 11 fclose(fp); 12}
回答2件
あなたの回答
tips
プレビュー