ページ 11

読み込んだファイルの内容を書き換えて表示するプログラム

Posted: 2012年1月29日(日) 10:00
by inc
ファイルを読み、その内容を書き換えて表示するプログラムを書きたく、質問させて頂きます。

数字が1〜100までランダムで並んでいるファイルを読み込み、昇順で並べるためにはどのようにプログラムを書けばいいのでしょうか。

例)
A 100
B 3
C 5

これを、
B 3
C 5
A 100

のようにしたいです。

ファイルを読み込んで表示する所までしか出来ませんでした。
どなたか分かるかたいらっしゃいましたら、教えて下さい。
宜しくお願い致します。

Re: 読み込んだファイルの内容を書き換えて表示するプログラム

Posted: 2012年1月29日(日) 10:38
by みけCAT
inc さんが書きました:ファイルを読み、その内容を書き換えて表示するプログラムを書きたく、質問させて頂きます。
内容の書き換えはメモリ上だけですか?それともファイルに書き込みますか?
inc さんが書きました:ファイルを読み込んで表示する所までしか出来ませんでした。
まずはこのソースコードを貼り付けてください。

ヒント
qsort関数
構造体

Re: 読み込んだファイルの内容を書き換えて表示するプログラム

Posted: 2012年1月29日(日) 11:34
by inc
みけCATさん
返信ありがとうございます。
inc さんが書きました:内容の書き換えはメモリ上だけですか?それともファイルに書き込みますか?
内容の書き換えはメモリ上だけです。

qsort関数の基本的な使い方は分かったのですが、読み込んだファイルとどう結びつけるかという所が分かりませんでした。
もう少しヒントを頂いても宜しいでしょうか?

Re: 読み込んだファイルの内容を書き換えて表示するプログラム

Posted: 2012年1月29日(日) 11:45
by みけCAT
みけCAT さんが書きました:
inc さんが書きました:ファイルを読み込んで表示する所までしか出来ませんでした。
まずはこのソースコードを貼り付けてください。
無視しないでください。

まず、このような構造体を用意します。

コード:

typedef struct {
	char mozi[100];/*必要な長さ確保*/
	int number;
} data_t;
次に、この構造体の配列を必要な数だけ確保します。

コード:

data_t data[10000];
もしくは

コード:

data_t* data;
data=calloc(10000,sizeof(data_t));
そして、この構造体にファイルのデータを読み込みます。

コード:

fscanf(fp,"%s%d",data[i].mozi,&data[i].number);/*iはループ変数*/
この配列をqsortでソートします。
参考http://support.microsoft.com/kb/73853/ja

よくqsort用の比較を引き算で実装している説明がありますが、オーバーフローの危険があるのでダメです。

Re: 読み込んだファイルの内容を書き換えて表示するプログラム

Posted: 2012年1月29日(日) 12:25
by たかぎ
みけCAT さんが書きました:よくqsort用の比較を引き算で実装している説明がありますが、オーバーフローの危険があるのでダメです。
今回に限れば、1~100までの値しかないようなので引き算でも十分ですね。
それと、1~100までしかないのであれば、まともにソートするより、100要素の配列に入れてから順番に出力する方がよい気がします。