セーブファイルの作り方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Gokuri

セーブファイルの作り方

#1

投稿記事 by Gokuri » 16年前

セーブファイルの作り方

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

複数の値を書き込んだり
読み込んだりするにはどうすればよいのでしょうか?
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);	// エラー処理
	}
}

Gokuri

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

#2

投稿記事 by Gokuri » 16年前

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

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

Dixq (管理人)

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

#3

投稿記事 by Dixq (管理人) » 16年前

うちで解説しているゲームの館の
http://dixq.net/g/#t0
この辺参考にならないでしょうか?

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

Gokuri

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

#4

投稿記事 by Gokuri » 16年前

管理人さま

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

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

Libra

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

#5

投稿記事 by Libra » 16年前

上のURLはファイル入出力を用いたセーブデータの作り方の解説なので、DxLibは用いられてません。
標準ライブラリのみの関数です。

質問者さんのソースの

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

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

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

MNS

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

#6

投稿記事 by MNS » 16年前

fwrite や fread は特にDirectX関連の関数ではなく、
標準入出力ライブラリの関数だったと思いますが?

bitter_orange

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

#7

投稿記事 by bitter_orange » 16年前

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

apple

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

#8

投稿記事 by apple » 16年前



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

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

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

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

Mist

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

#9

投稿記事 by Mist » 16年前

配列に格納する場合は&いらないです。

non

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

#10

投稿記事 by non » 16年前

例えば、
x23jjjの場合は
x34jjjでしょうか?それともx24jjjでしょうか?
符号はどうなりますか?

dic

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

#11

投稿記事 by dic » 16年前

仕様を決めてしまってから
決まった文字順に処理するのが考えられますし、
将来的にはポーランド記法というもので調べものをすれば参考になるかと思います

閉鎖

“C言語何でも質問掲示板” へ戻る