ページ 11

ランキングについて

Posted: 2012年11月21日(水) 15:48
by mmm
プログラミング初心者です。
DXライブラリを使用してランキングを制作したいのですが、データをバイナリ形式ではなく、テキスト形式でデータを保存し読み書きができるようにしたいです。
どんな関数をどのように使えばよいのか、恐れ入りますがご教授お願いします。

Re: ランキングについて

Posted: 2012年11月21日(水) 15:59
by softya(ソフト屋)
質問がシンプルなので答えもシンプルです。DXライブラリは無関係ですね。
C言語のfopen(),fprintf(),fgets()でしょう。テキストのフォーマットがシンプルならfscanf()も使えます。

Re: ランキングについて

Posted: 2012年11月21日(水) 18:09
by mmm
返信ありがとうございます。
ランキングには得点(数字)と名前(文字)を3位まで表示させ、データにはこれらの二つを3位まで保存したいのですが、どのようにしていいかわかりません。
本やネットを見ながら、

FILE *fp = fopen( "ランキング.txt", "r" );
int a[3];
char b[3];

if( fp == NULL ){
エラー処理;
}

for(int i=0;i<3;i++){
fgets(a,5,fp);
fgets(b,5,fp);
}

Re: ランキングについて

Posted: 2012年11月21日(水) 18:13
by mmm
途中で書きこんでしまいました。

FILE *fp = fopen( "ランキング.txt", "r" );
int a[3];
char b[3];

if( fp == NULL ){
エラー処理;
}

for(int i=0;i<3;i++){
    fgets(a,5,fp);
    fgets(b,5,fp);
}

//ランキング.txt
100
青木
200
佐藤
300
田中

読み込みはこんな感じでいいのでしょうか?

Re: ランキングについて

Posted: 2012年11月21日(水) 18:31
by nil
とりあえずコードを見ておかしいと思ったところを指摘します。
fcloseしてない。
fgetsの引数は( char*, int, FILE* )なので第一引数にint型のaを指定できない。
同様にchar型のbを指定できない。
3文字と制限をかけているのに第二引数に5を指定しているのはなぜか。
そもそもマルチバイトであれば全角文字2つは4バイトである。

数字を含むのであればfscanfのほうがよいでしょう。
あと、C言語の文字列についての知識はどのぐらいありますか?

Re: ランキングについて

Posted: 2012年11月21日(水) 18:36
by softya(ソフト屋)
codeタグをご利用ください。 この機会にフォーラムルールをご熟読をオススメします。 → http://dixq.net/board/board.html

問題点1
文字列と文字を混同しているフシがあります。
参考書等をお持ちなら見なおしてみてください。
文字列は文字の配列ですが、複数の文字列を扱うなら更に配列の次元が必要となります。
一般的には構造体にランキング数値と名前を持たして、その構造体の配列で管理すると思います。

問題点2
intが絡むと文字列→数値変換が必要です。
それとfgetsは今のままだとコンパイルエラーになるはずす。確認してみてください。

改善案
シンプルなフォーマットですので、プログラムで書いてプログラムが読み出すなら読み込んでから変換する手間を考えるとfscanfを使ったほうが楽かと思います。
書き出しはfprintfで行い読み出しはfscanfを使いましょう。

コードを投稿する時はコンパイルしてからお願いします。

Re: ランキングについて

Posted: 2012年11月21日(水) 18:51
by mmm
> 涼雅さん
>softya(ソフト屋)さん
お二方ご指摘ありがとうございました。
フォーラムルールを一読しておきます。

fscanfやfprintf関数を勉強してからまた来ます。
その時はまたご指導をよろしくお願いしますm(__)m

Re: ランキングについて

Posted: 2012年11月21日(水) 19:01
by softya(ソフト屋)
mmm さんが書きました:fscanfやfprintf関数を勉強してからまた来ます。
それだけはなく文字、文字列、配列は必須です。
できれば構造体も勉強したほうが良いです。

Re: ランキングについて

Posted: 2012年11月24日(土) 00:27
by mmm
その後、何とか自力で解決することができました。
アドバイスをいただいた皆様、本当にありがとうございました。

Re: ランキングについて

Posted: 2012年11月24日(土) 00:34
by softya(ソフト屋)
mmm さんが書きました:その後、何とか自力で解決することができました。
アドバイスをいただいた皆様、本当にありがとうございました。
フォーラムルールを読まれたのなら分かると思いますが、うまく動いたコードをここに書いて頂くことになっております。
ご協力をお願いします。