テキストデータに名前、スコアを書き込む方法
Posted: 2010年10月26日(火) 08:16
こんちわ、
今学祭向け(2010/11/4~)のクイズゲームを作っており、
そのランキングの実装がうまくいかず頓挫しています。
DXライブラリを使用しているのですが、ライブラリではファイルの読み込みはサポートされているのですが、
書き込みはサポートされておらず、ある程度検索しつつ見よう見まねで取り組んでみたものの、
ランキングを保存するテキストがうまく更新できません。
fopen、fwriteの使い方をおそらく間違っていると思うのですが、正しい使い方をご教示願います
ランキングのテキストデータの一部です
サンプルネーム0
10000
サンプルネーム1
9000
サンプルネーム2
8000
サンプルネーム3
7000
サンプルネーム4
6000
サンプルネーム5
5000
次にソースコードの一部です
求めている処理は、ランキングのテキストデータが以下のようになることです
サンプルネーム0
10000
サンプルネーム1
9000
サンプルネーム2
8000
サンプルネーム3
7000
プレイした人1
6500
サンプルネーム4
6000
サンプルネーム5
5000
なお、現在のソースコードの状態でビルドして起動すると以下のようになります
サンプルネーム0
10000
出来ればランキングは実装したいのでよろしくお願いします。
環境
Windows7 64bit
VisualStudio2010
ライブラリ:DXライブラリ
今学祭向け(2010/11/4~)のクイズゲームを作っており、
そのランキングの実装がうまくいかず頓挫しています。
DXライブラリを使用しているのですが、ライブラリではファイルの読み込みはサポートされているのですが、
書き込みはサポートされておらず、ある程度検索しつつ見よう見まねで取り組んでみたものの、
ランキングを保存するテキストがうまく更新できません。
fopen、fwriteの使い方をおそらく間違っていると思うのですが、正しい使い方をご教示願います
ランキングのテキストデータの一部です
サンプルネーム0
10000
サンプルネーム1
9000
サンプルネーム2
8000
サンプルネーム3
7000
サンプルネーム4
6000
サンプルネーム5
5000
次にソースコードの一部です
/* DXライブラリでファイルの読み込みは出来るので、 プレイ前のランキングをテキストから読み込んで、変数に入れています 具体的には、 char RankName[20] にランキングに入っているプレイした人の名前(iは順位) int RankScore にランキングには言っているプレイした人のスコア(iは順位) また、今回プレイした人の情報も事前に変数に格納しています char PlayName[20] に現在プレイしてる人の名前 double Score_Num に現在プレイしてる人のスコア(int型にキャストして表示、記録予定) int RankNum に現在プレイしてる人の順位(ランキングを読み込むことは出来るので、順位を出すところまでは実装しています) */ //ランキングテキストに記録 FILE *ranktext; char s[256]; sprintf_s(s, 256 , "Rank%d.txt", mode_p ); if((ranktext = fopen( s , "w" )) == NULL ){ fprintf(stderr, "ランクテキストオープンエラー\n"); } int line = FileLine( Ranking_text[mode_p] );//ランキングテキストの行数を返す関数です for(int i=0;i< line ; i++){ char score[21]; char Name[21]; if(i < RankNum){//順位がi未満なら、元のデータのスコア、名前を記述 sprintf_s(Name , 21 , "%s\0" , RankName); fwrite( Name , sizeof(char) , 21, ranktext); sprintf_s(score,21,"\n%d",RankScore); fwrite(score , sizeof(char) , 21 , ranktext); }else if(RankNum == i){//順位がiと同じなら、現在プレイしてる人の名前とスコアを記述してから、元のデータのスコアをその下に書き込み sprintf_s(Name , 21 , "%s\0" , PlayName); fwrite( Name , sizeof(char) , 21 , ranktext ); sprintf_s(score,21,"\n%d",(int)Score_Num); fwrite( score , sizeof(char) , 21 , ranktext ); sprintf_s(Name , 21 , "%s\0" , RankName); fwrite( Name , sizeof(char), 21 , ranktext ); sprintf_s(score,21,"\n%d",RankScore); fwrite( score, sizeof(char) , 21 , ranktext ); }else{//順位がi以上なら、元のデータのスコア、名前を記述 sprintf_s(Name , 21 , "%s\0" , RankName); fwrite( RankName , sizeof(char), 21 , ranktext ); sprintf_s(score,21,"\n%d",RankScore); fwrite( score , sizeof(char) , 21 , ranktext ); } } fclose(ranktext);
求めている処理は、ランキングのテキストデータが以下のようになることです
サンプルネーム0
10000
サンプルネーム1
9000
サンプルネーム2
8000
サンプルネーム3
7000
プレイした人1
6500
サンプルネーム4
6000
サンプルネーム5
5000
なお、現在のソースコードの状態でビルドして起動すると以下のようになります
サンプルネーム0
10000
出来ればランキングは実装したいのでよろしくお願いします。
環境
Windows7 64bit
VisualStudio2010
ライブラリ:DXライブラリ