こんばんは 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: ファイル操作について質問です!
この考え方が本当に必要でしょうか?もも さんが書きました:これをHPという文字があれば255を読み込む、SPという文字があれば0を読み込むという感じにしたいのですが、
頭に、HPやSPをつける必要があるの?
1行目がHP,2行目がSPで良いのでは?
どうしてもやりたいなら、それでもいいけど。
まず、1行ずつfgetsでデータを読み、
先頭の文字がHPかチェックし、HPなら、sscanfなどを使って数値を取り込みます。
HPでなければ、同様にSPかチェックします。
どころで、データの後に付いているスラッシュは何?コメント?
non
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイル操作について質問です!
んん?
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ファイル操作について質問です!
C++/CLIはSystem::Exceptionですから、それとも違うようですね。softya(ソフト屋) さんが書きました:んん?
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイル操作について質問です!
あっ、失礼しました。確かに違いますね。h2so5 さんが書きました:C++/CLIはSystem::Exceptionですから、それとも違うようですね。softya(ソフト屋) さんが書きました:んん?
throw system::Exception("ファイルを開くのに失敗したお\(^0^)/"); }
ってC++/CLIの例外処理では? C言語で使うべきものじゃないですね。
C++の独自実装でしょうか? だとしてもC言語の学習で使うのは違和感がありますね。
どこかの学校のライブラリなんでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
フィア
Re: ファイル操作について質問です!
注文の品作ってみました
補足
わざわざ特定の文字列が示された数値を特定の変数に入れるだけよりも
特定の文字列用の変数も用意したほうがいいかも
後、できれば構造体を作ってステータス専用のデータを格納したほうがいいです。
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);
}
わざわざ特定の文字列が示された数値を特定の変数に入れるだけよりも
特定の文字列用の変数も用意したほうがいいかも
後、できれば構造体を作ってステータス専用のデータを格納したほうがいいです。