ページ 11

セーブファイルの作り方

Posted: 2009年6月07日(日) 06:09
by Gokuri
セーブファイルの作り方

数値をテキストなどで書き込んだり
読み込んだりすることはできるようになったのですが

複数の値を書き込んだり
読み込んだりするにはどうすればよいのでしょうか?
typedef struct{
		int Score;
		int Stage;
		int PlayTime;
	}SAVE;

	SAVE Save;
こんなセーブデータをつくりたいです・・・。

現在の書き込み用関数です。
これでは1つしかセーブできずに何のデータかわからないです・・・
void	WriteFile(int Num)
{

	// printf("Data = %d\n",(int)Num);

	FILE	*fp;			// ファイルポインタを宣言

	// ファイルを開く
	if((fp = fopen("Save.txt", "w")) == NULL){		// wは書き込み rで読み込み
		printf("FILE OPEN ERROR\n");				// エラー処理
	}

	fprintf(fp, "%d",(int)Num);						// ファイルへ文字列を書き込む

	// ファイルを閉じる
	if(fclose(fp) == EOF){		
		MessageBox(hWnd,TEXT("セーブに失敗しました。"),NULL,MB_OK);	// エラー処理
	}
}

Re:セーブファイルの作り方

Posted: 2009年6月07日(日) 06:10
by Gokuri
こんなセーブデータをつくりたいです・・・。

こんなデータがあるのですがこれを同じテキストファイルにセーブしたいです。

Re:セーブファイルの作り方

Posted: 2009年6月07日(日) 10:09
by Dixq (管理人)
うちで解説しているゲームの館の
http://dixq.net/g/#t0
この辺参考にならないでしょうか?

構造体はまとめて書き出し、読み込みが出来るので便利です。

Re:セーブファイルの作り方

Posted: 2009年6月07日(日) 13:06
by Gokuri
管理人さま

使っている環境をのせないですみません。

DXをつかわずにAPIだけで組んでいるので
DXで用意されています関数が使えません。

Re:セーブファイルの作り方

Posted: 2009年6月07日(日) 13:33
by Libra
上のURLはファイル入出力を用いたセーブデータの作り方の解説なので、DxLibは用いられてません。
標準ライブラリのみの関数です。

質問者さんのソースの

fprintf(fp, "%d",(int)Num);

は、NUMに入っているデータをファイルに書き込むという動作なので

fprintf(fp, "%d %d %d",(int)Num,(int)Time,(int)Score);
↑最初の書き込みを修正
と、3つ書いてやれば3種類のデータを書き込めます。

Re:セーブファイルの作り方

Posted: 2009年6月07日(日) 13:35
by MNS
fwrite や fread は特にDirectX関連の関数ではなく、
標準入出力ライブラリの関数だったと思いますが?

Re:セーブファイルの作り方

Posted: 2009年6月07日(日) 19:17
by bitter_orange
fwrite や fread 関数をどうしても使いたくないなら、
Win32API の ReadFile や WriteFile を使ってみたらどうですか?
自分は使わないのでよくわかりませんが、
たしかこれらの関数も構造体を入出力できたと思います。
ttp://www.geocities.jp/ky_webid/win32c/051.html
個人的な意見ですが、他の方々が仰る通り、fread や fwrite を使用したほうがいいと思います。
あとエラー時は perror 関数を使ったほうがいいかもしれないです。

scanf,配列について質問です

Posted: 2009年6月18日(木) 17:00
by apple


scanfで文字と数字を読み取って数字部分を計算して変更する
というプログラムを作りたいのですがうまくいきません。
読み取りは
char kan[50];
scanf("%s",&kan);
と書いています。

たとえば
x2jjj
と入力したら
x3jjj
と出力するようにしたく

今は計算を
kan[1] = kan[1] + 1;
と書いていますが実行してもx2jjjなどと入力すると例外となって止まってしまいます。

どうすれば数字と文字を読み取って数字部分を計算して出力することができるでしょうか?

Re:scanf,配列について質問です

Posted: 2009年6月18日(木) 17:57
by Mist
配列に格納する場合は&いらないです。

Re:scanf,配列について質問です

Posted: 2009年6月18日(木) 18:05
by non
例えば、
x23jjjの場合は
x34jjjでしょうか?それともx24jjjでしょうか?
符号はどうなりますか?

Re:scanf,配列について質問です

Posted: 2009年6月18日(木) 21:33
by dic
仕様を決めてしまってから
決まった文字順に処理するのが考えられますし、
将来的にはポーランド記法というもので調べものをすれば参考になるかと思います