ランキングについて

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

ランキングについて

#1

投稿記事 by mmm » 13年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ランキングについて

#2

投稿記事 by softya(ソフト屋) » 13年前

質問がシンプルなので答えもシンプルです。DXライブラリは無関係ですね。
C言語のfopen(),fprintf(),fgets()でしょう。テキストのフォーマットがシンプルならfscanf()も使えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mmm

Re: ランキングについて

#3

投稿記事 by mmm » 13年前

返信ありがとうございます。
ランキングには得点(数字)と名前(文字)を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);
}

mmm

Re: ランキングについて

#4

投稿記事 by mmm » 13年前

途中で書きこんでしまいました。

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
田中

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

nil
記事: 428
登録日時: 14年前

Re: ランキングについて

#5

投稿記事 by nil » 13年前

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ランキングについて

#6

投稿記事 by softya(ソフト屋) » 13年前

codeタグをご利用ください。 この機会にフォーラムルールをご熟読をオススメします。 → http://dixq.net/board/board.html

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

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

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

コードを投稿する時はコンパイルしてからお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mmm

Re: ランキングについて

#7

投稿記事 by mmm » 13年前

> 涼雅さん
>softya(ソフト屋)さん
お二方ご指摘ありがとうございました。
フォーラムルールを一読しておきます。

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ランキングについて

#8

投稿記事 by softya(ソフト屋) » 13年前

mmm さんが書きました:fscanfやfprintf関数を勉強してからまた来ます。
それだけはなく文字、文字列、配列は必須です。
できれば構造体も勉強したほうが良いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mmm

Re: ランキングについて

#9

投稿記事 by mmm » 13年前

その後、何とか自力で解決することができました。
アドバイスをいただいた皆様、本当にありがとうございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ランキングについて

#10

投稿記事 by softya(ソフト屋) » 13年前

mmm さんが書きました:その後、何とか自力で解決することができました。
アドバイスをいただいた皆様、本当にありがとうございました。
フォーラムルールを読まれたのなら分かると思いますが、うまく動いたコードをここに書いて頂くことになっております。
ご協力をお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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