電子書籍の厳選無料作品が豊富!

C言語についての質問です。

統計学のシュミレータを作っていまして
大量の数値データ(1000程度)のデータを入力する必要があるのですが
scanfなどで入力要求するには、数に無理がありますので
外部テキストファイルからプログラムに読み込みたいのですが
方法が分かりません。

希望としては、まずテキストファイルに
1000個の数値データを入力しておいて
(数値データのみをコンマとか改行で区切ったものをあらかじめ作成しておく)
それを1000個の配列 int data[1000]に
順番にインポートできるようにしたいです。
データ数は1000個で固定、すべてint型でOKです。

数値として処理したいので
文字列としてインポートしてしまうのはダメです。
あくまでint型の数値として考えてください。

回答よろしくお願いします。

A 回答 (4件)

改行で区切られているなら簡単で、


fgets() で1行ずつ読み込んで、その文字列をatoi()で整数値に変換して格納すればいいでしょう。

もし、コンマ区切りなら、fgets()で読み込んだ後、atoi()で整数化、次のカンマを探す、カンマの次の文字からからまたatoi()で整数化というのをカンマでなく'\0'が出てくるまで繰り返す。
    • good
    • 0
この回答へのお礼

この方法を使って
上手く動作するプログラムが作れました。

どうもありがとうございました。

お礼日時:2004/06/25 23:14

>数値として処理したいので


>文字列としてインポートしてしまうのはダメです。
>あくまでint型の数値として考えてください。

数字の文字列をint型の数値に変換するのですね?
標準関数の
atoi()関数を使って変換して下さい。
(意味は、アスキー to int かな?)

char buf[4];
int i ;

buf[0]='0';
buf[1]='2';
buf[2]='3';
buf[3]=0;(*注意)

i = atio(buf) ;

で、iにはint型の整数23が代入されます。

数値データの区切り文字そのままでは
変換できませんよ。
最後は必ず0で、('0'じゃ駄目)

まあ、関数の解説読めばわかると思いますが。
    • good
    • 0

fscanfという関数もあります。

使用法は参考URLをどうぞ。

またscanfでも実行時に

$ a.out < データファイル名

とすることによってファイルの内容が標準入力を代替してくれます。

参考URL:http://www.kiso.tsukuba.ac.jp/~makimura/text/nod …
    • good
    • 0

コンマとか改行コードで区切っておくってのは、入力するテキストファイルには文字列として数値データがあるんですよね?


でしたら、getc関数で1文字づつ呼んで数値に変換してそれをdata[1000]の配列に入れるとか。
 
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!