ページ 11

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

Posted: 2007年4月27日(金) 21:47
by 大工
double型 とfloat型についての質問です。

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

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

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

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

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

Posted: 2007年4月27日(金) 22:12
by なぎ
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:いったいどっちが・・・・

Posted: 2007年4月27日(金) 23:46
by 大工
なぎ 様>>>>>

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