• 締切済み

小数が、18行x72列、並んでいるファイルを読みます。どうしたら良いでしょうか。

a-kumaの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> 自分で書き出したデータなのに間抜けなことですが、どうしたらC言語で安定して、読み込めるでしょうか。 > > fgets? fgetc? scanfは不安です。 何が不安ですか? fscanf() を使うのが簡単で安定しています。 ただ数値を抜き出すだけならば、こんな感じ。fscanf() が空白や改行を読み飛ばしてくれます。   ※ No.2 と比べれば、どれだけ簡単に書けるかは一目瞭然ですね #include <stdio.h> int main(void) { FILE* in; double x; in = fopen("データファイル", "r"); while (fscanf(in, "%lf", &x) == 1) { printf("%f\n", x); } return 0; } scanf() や fscanf() は悪者扱いをされることが多いですが、きちんと知らない 人が、理由もわからずに、口伝に中途半端な知識が広がったのでしょう。 scanf() 系が苦手なのは、期待している書式と違うものがきたときの処置です。 先の例だと、実数とみなせない文字列(整数はOK)が来た場合には、あっさり ループを抜けます。 ただ、今回の場合には、自分で作成したデータということなので、その問題は 少ないと思います。

harapeko99
質問者

お礼

ありがとうございます。

関連するQ&A

  • fgetsを使って入力した文字列を読み込む。

    こんにちは。私は30代の男性です。 上司から、「C言語でコーディングする際にscanfは使わずにfgetsを使うように」との指示があったのですが、scanfしか使ったことがないので、具体的にどうコーディングすればいいのかわかりませんでした(聞いても教えてもくれず…)。どのようにすればfgetsを使って入力した文字列を読み取れるのか、わかる方がいらっしゃれば簡単な例文で教えて頂けるとありがたいのですが。 どうぞ宜しくお願い致します。

  • 文字列の読み込みに関して

    C言語で、fgetsを使って文字列ファイルから読み込みを行うと、改行もしくは指定した文字列が来ると読み込みを、止めますが途中で改行が来ても読み飛ばして。(丸)までを読み込むようにするには、どのようなコードを書けばいいのですか? 別に使う関数は、これ以外でもいいのでコードを教えてもらえますか? お願いします。

  • C言語の入出力関数の違い

    C言語を勉強しています。 自分が知っている入出力を行う関数は printf scanf fprintf fscanf sprintf sscanf gets puts getc putc fgets fputs fgetc fputc なのですがそれぞれのメリット・デメリットの違いがまだあいまいです。 というかまだ上の4つくらいしかまともに使ったことがありません。 自分の考えでは、 ・上の4つは書式を指定でき、ファイルから読み込みするときなどは fgetsよりもfscanfが使いやすいと思っています。 ・スペースを読み込みたいときはscanfではなくgetsを使わなければならない。 ・システム開発でscanfを使うことは危険なのでほとんどない。 間違った考え方をしていたり、どのようなデータのときに どの関数を使うのが正しい、常識、と知っている方いらっしゃいましたら 教えてください。

  • 標準入力の際に、、、fgets

    標準入力の際にgetsやscanfは読み込むバイト数を指定できないので危険、 fgetsを使えという話を良く聞きますが、fgetsだと改行まで読み込んで しまいますよね。これで少し困っています。 読み込んだ文字列から'\n'を探して'\0'を代入することはできますが 面倒くさいです。もっと手軽にscanfのように改行を含めずに 標準入力から受け付けるのをfgetsなどではどうやればいいのでしょうか。 よろしくお願いいたします。

  • 小数点を整数型に変換

    ・8.7  ・14.5 ・3.456 などのデータがあり、この値を四捨五入 などをせずに 「整数2桁 + 小数5桁」に変換したいのですが、String.Formatなどで行うと意図した値になりません。 ・8.7 ⇒ 87.00000 ・14.5 ⇒ 14.50000 ・3.456 ⇒ 34.56000 何か良い方法がありましたら、アドバイスを頂けないでしょうか。 言語:C# VisualStudio 2008 以上、よろしくお願い致します。

  • 文字列変換マクロ

    小数点以下5桁(B列)をC列に文字列として変換したいです。 (B列は3.62%入力で表示形式をパーセンテージの小数点以下5桁で表示) データ量が多いためVBA作成希望です。どなたか教示お願いします。

  • 文字列で小数点以下の0を削除したい

    「0.987000」とか「12.345670」などのように 小数点6桁目まで0埋めされた入力データがあります。 これの右の0を取った文字列を作成したいのですが 数値の誤差なく取る方法はあるでしょうか? 思いついたのは、「CDblしてCStrする。」です。

  • cシェルで指定行の文字列加工について

    cシェルで指定行の文字列加工について cシェルについて、以下のような加工をしたいのですがうまくいきません。 どなたか教えてください。 (1)1行目をMAX20byteになるように残りスペース埋め 最終行をMAX20byteになるように残りスペース埋め  A,000,000,000,000(改行)  ・(改行)  ・(改行)  ・(改行)  C,000,000(改行)        ↓  A,000,000,000,000 (改行)  ・(改行)  ・(改行)  ・(改行)  C,000,000 (改行) (2)1行目をMAX17byteになるように後半のスペースを削除   最終行を9byteになるように後半のスペースを削除   A,000,000,000,000 (改行)  ・(改行)  ・(改行)  ・(改行)  C,000,000 (改行)    ↓  A,000,000,000,000(改行)  ・(改行)  ・(改行)  ・(改行)  C,000,000(改行) すみませんが、よろしくお願いします(>_<)

  • ファイル読み込みについて

    CまたはC++で、データごとにタブで区切られたテキストファイルを読み込む処理があります。 例) 項目1(タブ)fea 5310 a(タブ)2009(改行) 項目2(タブ)dc 6307(タブ)2012(改行) 項目3(タブ)beaf 23 t(タブ)2010(改行) fscanf で読み込もうとしたのですが、タブとスペースが同じように扱われてしまうようで、 スペースが含まれるデータがある場合、上手く読み込めませんでした。 結局、fgets で一行ずつ一時バッファに読み込んでから一文字ずつチェックして データごとに切り分けたのですが、釈然としません。 もっと簡潔な方法はないでしょうか?

  • 小数の表示が・・・。

    初歩的な質問で申し訳ないです。 「2個の整数値を標準入力装置(キーボード)から読み込み、その平均値を計算して結果を標準出力装置(ディスプレイ)に出力するというプログラムを書きなさい。小数以下1桁を表示すること。」 という問題を考えていたのですが、上手くいきません。 intじゃダメということはわかるのですが、floatやdoubleにしたら答えがおかしくなります。 intで割り切れる数字だったらこれでいいみたいですが割り切れない奴を小数1桁表示ができません。 どうすべきでしょうか? #include <stdio.h> main() { int a,b,c; printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); c=(a+b)/2; printf("平均値は%dです。",c); }