• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fscanf()【C言語】)

C言語のfscanf()でテキストファイルを読み込む方法

このQ&Aのポイント
  • C言語のfscanf()を使用してテキストファイルを読み込む方法を教えてください。
  • 私はWindows7とBorland C++ 5.5.1 for Win32を使用しています。
  • status.txtというファイルからデータを読み取るプログラムを作成しましたが、うまく動作しません。

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

  • ベストアンサー
  • tsunji
  • ベストアンサー率20% (196/958)
回答No.4

while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){ i++; printf("%d%f%f\n",ret,s[i],w[i]); } ここのところを以下のようにしてください。 while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){ printf("%d%f%f\n",ret,s[i],w[i]); i++; }

jororo0
質問者

補足

i++;の位置を直したら全てきれいに出てくれました。 ありがとうございます。 しかし、なぜなのでしょうか?

その他の回答 (6)

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

>しかし、なぜなのでしょうか? 1行ずつトレースしていけば判るかと思いますが…… ループ1回目(iの値は0)=> while((ret=fscanf(filepointer,"%f,%f",&s[0],&w[0]))==2){ ->ということでs[0]とw[0]に読み込み。 i++; ->iがインクリメントされて1になる。 printf("%d%f%f\n",ret,s[1],w[1]); ->値が未設定のs[1]とw[1]を表示する。 ループ2回目(iの値は1)=> while((ret=fscanf(filepointer,"%f,%f",&s[1],&w[1]))==2){ ->ということでs[1]とw[1]に読み込み。  (s[1]とw[1]の内容は更新されるが、表示済みの内容を書き換えてはくれない) i++; ->iがインクリメントされて2になる。 printf("%d%f%f\n",ret,s[2],w[2]); ->値が未設定のs[2]とw[2]を表示する。 以下略。

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

ついでに……status.txtが11行以上あったりすると吹っ飛びかねないのでその辺りにはご注意を。

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

ああ、確かにiのインクリメント位置がおかしいですな。 ツッコミサンクスです。>#4&#5 しかし…ローカル変数ですからゴミが出るかと思いきや、以外とまともな値(0)が表示されていますな。 まぁ、1箇所へんなの出ていますけど。

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

ついでだけどインクリメントの位置はおかしい.

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

>while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){ 「scanf double」で検索すると……。 http://www.ei.fukui-nct.ac.jp/~t-saitoh/edu/ProgAppl/pa-faq-float.html http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-3 などなど……。 %fではなく%lfを使用して下さい。

回答No.1

scanf系関数の「%f」は「float型」だよ。 質問者さんは、float型ではなく、double型の変数のポインタを指定してるよね? 「%f」を「%lf」にしてみよう。 これ、scanfの「基本中の基本」だから、こういう質問は「超恥ずい」っすよ。

jororo0
質問者

補足

いろいろ書き換えてる間にdoubleに変えていることを忘れていました。 申し訳ないです。 floatに直した出力結果です。 40E714 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 168728878714947758600000000000000000000.0 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000

関連するQ&A