ページ 11

ファイル操作について質問です!

Posted: 2013年2月13日(水) 01:34
by もも
こんばんは C言語初心者のももです!

現在C言語でゲーム作成を行っており、プレイヤーのステータス(HPとか)をファイルから読み込んでみたいと思い作業に取り組んでいます。

//プレイヤーのデータをロードする-------------------------------------------------------
LoadData( char *file_name )
{
int _hp;
int _sp;

//ファイルオープン
FILE *fp = fopen( file_name,"r" );

if( fp==NULL ){ throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }

//hpのロード
fscanf(fp, "%d", &(_hp));
//spのロード
fscanf(fp, "%d", &(_sp));

//ファイルクローズ
fclose(fp);

hp = _hp;
sp = _sp;
}

現在上の様な感じでデータを読み込んでいます

ファイルの中身はこんな感じです。

//ファイルの中身 //
255 //
0 //
////////////////

これをHPという文字があれば255を読み込む、SPという文字があれば0を読み込むという感じにしたいのですが、
どうすればよいのですか?
どこかサンプルになるようなコードが書かれたサイトとかありませんか?
よければサンプルとか書いてくれれば嬉しいです。

//ファイルの中身 //
HP 255 //
SP 0 //
////////////////

Re: ファイル操作について質問です!

Posted: 2013年2月13日(水) 11:06
by non
もも さんが書きました:これをHPという文字があれば255を読み込む、SPという文字があれば0を読み込むという感じにしたいのですが、
この考え方が本当に必要でしょうか?
頭に、HPやSPをつける必要があるの?
1行目がHP,2行目がSPで良いのでは?

どうしてもやりたいなら、それでもいいけど。
まず、1行ずつfgetsでデータを読み、
先頭の文字がHPかチェックし、HPなら、sscanfなどを使って数値を取り込みます。
HPでなければ、同様にSPかチェックします。

どころで、データの後に付いているスラッシュは何?コメント?

Re: ファイル操作について質問です!

Posted: 2013年2月13日(水) 11:18
by softya(ソフト屋)
んん?
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。

Re: ファイル操作について質問です!

Posted: 2013年2月13日(水) 11:41
by h2so5
softya(ソフト屋) さんが書きました:んん?
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。
C++/CLIはSystem::Exceptionですから、それとも違うようですね。

Re: ファイル操作について質問です!

Posted: 2013年2月13日(水) 11:56
by softya(ソフト屋)
h2so5 さんが書きました:
softya(ソフト屋) さんが書きました:んん?
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。
C++/CLIはSystem::Exceptionですから、それとも違うようですね。
あっ、失礼しました。確かに違いますね。
C++の独自実装でしょうか? だとしてもC言語の学習で使うのは違和感がありますね。
どこかの学校のライブラリなんでしょうか。

Re: ファイル操作について質問です!

Posted: 2013年2月15日(金) 00:26
by フィア
注文の品作ってみました

コード:

LoadData( char *file_name ){

	FILE *fp;
	char stet[20];
	int han;
	int suuti;
	int _hp;
	int _sp;

	fp = fopen( file_name,"r" );

	if( fp == NULL ){
		printf( "ファイルを開くのに失敗したお\(^0^)/\n");
	}

	while( ( han = fscanf( fp, "%s %d", stet, &suuti ) ) != EOF ){
		if(strcmp(stet,"HP")==0){_hp=suuti;}
		if(strcmp(stet,"SP")==0){_sp=suuti;}
	}

	fclose( fp );

	//変数に入ってるかの確認用
	printf("HP %d\n",_hp);
	printf("SP %d\n",_sp);

}
補足
わざわざ特定の文字列が示された数値を特定の変数に入れるだけよりも
特定の文字列用の変数も用意したほうがいいかも

後、できれば構造体を作ってステータス専用のデータを格納したほうがいいです。

Re: ファイル操作について質問です!

Posted: 2013年2月19日(火) 23:14
by もも
ありがとうございました!!