• ベストアンサー

C言語でファイルの入出力

C言語についての質問です。 統計学のシュミレータを作っていまして 大量の数値データ(1000程度)のデータを入力する必要があるのですが scanfなどで入力要求するには、数に無理がありますので 外部テキストファイルからプログラムに読み込みたいのですが 方法が分かりません。 希望としては、まずテキストファイルに 1000個の数値データを入力しておいて (数値データのみをコンマとか改行で区切ったものをあらかじめ作成しておく) それを1000個の配列 int data[1000]に 順番にインポートできるようにしたいです。 データ数は1000個で固定、すべてint型でOKです。 数値として処理したいので 文字列としてインポートしてしまうのはダメです。 あくまでint型の数値として考えてください。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

改行で区切られているなら簡単で、 fgets() で1行ずつ読み込んで、その文字列をatoi()で整数値に変換して格納すればいいでしょう。 もし、コンマ区切りなら、fgets()で読み込んだ後、atoi()で整数化、次のカンマを探す、カンマの次の文字からからまたatoi()で整数化というのをカンマでなく'\0'が出てくるまで繰り返す。

kyu-hama
質問者

お礼

この方法を使って 上手く動作するプログラムが作れました。 どうもありがとうございました。

その他の回答 (3)

  • No51
  • ベストアンサー率18% (25/136)
回答No.3

>数値として処理したいので >文字列としてインポートしてしまうのはダメです。 >あくまで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'じゃ駄目) まあ、関数の解説読めばわかると思いますが。

回答No.2

fscanfという関数もあります。使用法は参考URLをどうぞ。 またscanfでも実行時に $ a.out < データファイル名 とすることによってファイルの内容が標準入力を代替してくれます。

参考URL:
http://www.kiso.tsukuba.ac.jp/~makimura/text/node128.html
回答No.1

コンマとか改行コードで区切っておくってのは、入力するテキストファイルには文字列として数値データがあるんですよね? でしたら、getc関数で1文字づつ呼んで数値に変換してそれをdata[1000]の配列に入れるとか。  

関連するQ&A