いったいどっちが・・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大工

いったいどっちが・・・・

#1

投稿記事 by 大工 » 18年前

double型 とfloat型についての質問です。

超初歩的なことで申し訳ないんですが・・・・

printf 関数でdouble型を出力するときに %f か %lf かを使うかで迷います。

あるサイトでは「double型なら%fを使えばいい、%lfは間違い」とあり、違うサイトでは「%f、%lfどちらでもよい(または、l←エル は省略可)」とありました。

いったいどちらを信用したらよいのでしょうか??

なぎ

Re:いったいどっちが・・・・

#2

投稿記事 by なぎ » 18年前

printf() では、"%f" が正解です。(double も float も)
scanf() では、double * は、"%lf", float * は、"%f" です。

実は、printf() のような、「可変長引数」の関数では、float を渡すと、無条件に double に格上げされます。
解説は、
http://www.kouno.jp/home/c_faq/c15.html
など。

ですから、printf() では、float を渡しても、double を渡しても、double に変換されます。
そして、double は、"%f" という書式指定子が対応しています。

一方で、scanf() の場合は、事情が異なります。
scanf() はポインタを受け取ります。ですから、float * を double * に変換するようなことはできません。
ですから、scanf() では、float * と double * は区別する必要があります。
それぞれの(scanf() における)書式指定子は "%f" と "%lf" です。

大工

Re:いったいどっちが・・・・

#3

投稿記事 by 大工 » 18年前

なぎ 様>>>>>

なるほど!ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る