プログラミング初心者です。
DXライブラリを使用してランキングを制作したいのですが、データをバイナリ形式ではなく、テキスト形式でデータを保存し読み書きができるようにしたいです。
どんな関数をどのように使えばよいのか、恐れ入りますがご教授お願いします。
ランキングについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ランキングについて
質問がシンプルなので答えもシンプルです。DXライブラリは無関係ですね。
C言語のfopen(),fprintf(),fgets()でしょう。テキストのフォーマットがシンプルならfscanf()も使えます。
C言語のfopen(),fprintf(),fgets()でしょう。テキストのフォーマットがシンプルならfscanf()も使えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
mmm
Re: ランキングについて
返信ありがとうございます。
ランキングには得点(数字)と名前(文字)を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);
}
ランキングには得点(数字)と名前(文字)を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: ランキングについて
途中で書きこんでしまいました。
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
田中
読み込みはこんな感じでいいのでしょうか?
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: ランキングについて
とりあえずコードを見ておかしいと思ったところを指摘します。
fcloseしてない。
fgetsの引数は( char*, int, FILE* )なので第一引数にint型のaを指定できない。
同様にchar型のbを指定できない。
3文字と制限をかけているのに第二引数に5を指定しているのはなぜか。
そもそもマルチバイトであれば全角文字2つは4バイトである。
数字を含むのであればfscanfのほうがよいでしょう。
あと、C言語の文字列についての知識はどのぐらいありますか?
fcloseしてない。
fgetsの引数は( char*, int, FILE* )なので第一引数にint型のaを指定できない。
同様にchar型のbを指定できない。
3文字と制限をかけているのに第二引数に5を指定しているのはなぜか。
そもそもマルチバイトであれば全角文字2つは4バイトである。
数字を含むのであればfscanfのほうがよいでしょう。
あと、C言語の文字列についての知識はどのぐらいありますか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ランキングについて
codeタグをご利用ください。 この機会にフォーラムルールをご熟読をオススメします。 → http://dixq.net/board/board.html
問題点1
文字列と文字を混同しているフシがあります。
参考書等をお持ちなら見なおしてみてください。
文字列は文字の配列ですが、複数の文字列を扱うなら更に配列の次元が必要となります。
一般的には構造体にランキング数値と名前を持たして、その構造体の配列で管理すると思います。
問題点2
intが絡むと文字列→数値変換が必要です。
それとfgetsは今のままだとコンパイルエラーになるはずす。確認してみてください。
改善案
シンプルなフォーマットですので、プログラムで書いてプログラムが読み出すなら読み込んでから変換する手間を考えるとfscanfを使ったほうが楽かと思います。
書き出しはfprintfで行い読み出しはfscanfを使いましょう。
コードを投稿する時はコンパイルしてからお願いします。
問題点1
文字列と文字を混同しているフシがあります。
参考書等をお持ちなら見なおしてみてください。
文字列は文字の配列ですが、複数の文字列を扱うなら更に配列の次元が必要となります。
一般的には構造体にランキング数値と名前を持たして、その構造体の配列で管理すると思います。
問題点2
intが絡むと文字列→数値変換が必要です。
それとfgetsは今のままだとコンパイルエラーになるはずす。確認してみてください。
改善案
シンプルなフォーマットですので、プログラムで書いてプログラムが読み出すなら読み込んでから変換する手間を考えるとfscanfを使ったほうが楽かと思います。
書き出しはfprintfで行い読み出しはfscanfを使いましょう。
コードを投稿する時はコンパイルしてからお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
mmm
Re: ランキングについて
> 涼雅さん
>softya(ソフト屋)さん
お二方ご指摘ありがとうございました。
フォーラムルールを一読しておきます。
fscanfやfprintf関数を勉強してからまた来ます。
その時はまたご指導をよろしくお願いしますm(__)m
>softya(ソフト屋)さん
お二方ご指摘ありがとうございました。
フォーラムルールを一読しておきます。
fscanfやfprintf関数を勉強してからまた来ます。
その時はまたご指導をよろしくお願いしますm(__)m
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ランキングについて
それだけはなく文字、文字列、配列は必須です。mmm さんが書きました:fscanfやfprintf関数を勉強してからまた来ます。
できれば構造体も勉強したほうが良いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ランキングについて
フォーラムルールを読まれたのなら分かると思いますが、うまく動いたコードをここに書いて頂くことになっております。mmm さんが書きました:その後、何とか自力で解決することができました。
アドバイスをいただいた皆様、本当にありがとうございました。
ご協力をお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。