• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語で複数列のデータを1列のみ読み込みたい)

C言語で複数列のデータを1列のみ読み込む方法

このQ&Aのポイント
  • C言語で複数列のデータを1列のみ読み込む方法について教えてください。
  • 行m列の任意のデータの処理を行うプログラムで、列ごとの統計を行うためにm列目のデータを取り出したいのですが、うまくいきません。どのようなコードを書けばいいでしょうか?
  • また、プログラム中でEOFを使っているためか、行数のiには全データ数が入ってしまいます。この問題を解決する方法も教えてください。

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.5

>どのようなコードを書けばいいでしょうか?  http://okwave.jp/qa/q7114321.html #3  読み込み時に配列に格納しないで、  文字列として1行読み込んでから、(数値化し)配列に格納する例です。  「m列目のデータ」の前には、m - 1 個の空白があるので、それをカウントし数値化します。  (ただし、文字列には空白が連続しないこと)  「実数」を「整数」に、「コンマ」を「空白」に置き換えればよいかと。  http://www.bohyoh.com/CandCPP/C/Library/fgets.html  http://www.bohyoh.com/CandCPP/C/Library/atoi.html

satorigusa
質問者

お礼

回答ありがとうございます!コメントが遅くなってすみません. 配列に格納するタイミングが違うんですね!! その後何とかプログラムできました.

その他の回答 (4)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.4

確かにそうなりますね。>#3 iがどこまで増えて行くのか…というので、バッファオーバーランもありそうなコードではありますが… A[][]の詳細が不明ですのでなんとも…。 # その後のjについても同様。 で……A[][]にちゃんと読み込めるコードにもなっていなかったりしますね。 エラー処理は別として…ファイルから2次元配列に読み込む。 なんてコードは検索するといろいろ見つかると思います。

satorigusa
質問者

お礼

回答ありがとうございます. これではA[][]に読み込めないんですか?! それ自体「どこがどう」とすぐわからないので,まだまだ勉強不足です…. ネットや参考書などもっと探してみますね.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

数字以外, より正確には「%lf に適合しない」入力が与えられると fscanf(fp, "%lf", &A[i][0]) は 0 を返しますが, EOF は負の数である (当然 0 でもない) ので fscanf(fp, "%lf", &A[i][0]) != EOF の結果は 1 となり, したがって無限ループになる (現実的には何らかの実行時エラーで異常終了しそう) というのが「正しい動作」ではないでしょうか>#2. このようなプログラムを作った背景にある「理屈」を説明できますか?

satorigusa
質問者

補足

回答ありがとうございます. 正しい動作の理屈はなるほど!と思えました. プログラム作成の理屈は,正直説明できません. 参考書などを見ながら使えそうな文法を探して,理解できたものもありましたが 理解できなかったものも そのままイメージであてはめていったようなものなので…. かなり「こう動いてくれたらうれしい」という感じで書いていった部分はあります. 勉強不足は間違いないのでもっとじっくり取り組もうと思います.

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

読み込んでいるファイルの内容はどんな感じなんでしょう? >while (fscanf(fp, "%lf", &A[i][0]) != EOF{ >i++; >} >while (fscanf(fp, "%lf", &A[0][j]) != EOF){ >j++; >} の先のwhileループはどこで抜けることを期待しているのでしょう? # 今は…おそらく全部読み込んでますよね。 データファイルに意図的にエラーになるように書いていない限り。 # たとえば、各行の最後に数字以外が書かれているとか。<もっとも、これだと次のfscanf()次第でオワるのですが…。

satorigusa
質問者

補足

回答ありがとうございます. データは例えば以下のような形です. テキスト形式で,特に意味のある数字ではありません. 1 65 3 2 83 71 20 4 39 これだと3行3列なので,このデータはA[3][3]だと判断して 表示させたいです. fscanf(fp,"%lf",&A[0][j]) では,&A[0][j]としたら jに列数が入ってくれるのではないかと思ったのですが,違うようで….

  • f272
  • ベストアンサー率46% (8529/18254)
回答No.1

ぐだぐだ言わずにデータを全部読んで必要なところだけ使えばよいだろう。

satorigusa
質問者

お礼

リプライありがとうございます. そうなんですが…必要な部分だけ使うために「何列目」という指定がしたいです. 一つの方法にこだわらずにもっと自分でも調べ直してみます.

関連するQ&A

専門家に質問してみよう