1. ホーム
  2. c

[解決済み] printfにおけるdoubleの正しい書式指定子

2022-03-02 15:50:47

質問

の正しい書式指定子は何ですか? double をprintfで使用することはできますか?それは %f それとも %lf ? 私は %f が、よくわからない。

コードサンプル

#include <stdio.h>

int main()
{
   double d = 1.4;
   printf("%lf", d); // Is this wrong?
}

解決方法は?

"%f" は、ダブルの正しい形式です(少なくとも1つ)。そこで のフォーマットはありません。 float を渡そうとすると float から printf に昇格します。 double 前に printf 受け取る 1 . "%lf" は、現行規格でも許容されます。 l が続くと効果がないように指定されています。 f 変換指定子(中略)。

なお、ここは printf の書式文字列と大きく異なります。 scanf (そして fscanf など)の書式文字列です。出力には から昇格されます。 float から double を variadic パラメータとして渡した場合。入力の場合は ポインタ これはプロモートされないので、このような場合は scanf を読みたいのか、それとも float または double の場合、そのため scanf , %f を読み取ることを意味します。 float%lf を読み取ることを意味します。 double (そして、何気に long double を使用すると %Lf のどちらかに対して printf または scanf ).


<サブ 1. C99, §6.5.2.2/6: "呼び出される関数を示す式がプロトタイプを含まない型を持つ場合、各引数に対して整数の昇格が行われ、float型を持つ引数はdoubleに昇格します。C++では、表現は多少異なりますが(例えば、prototypeという単語は使用しません)、効果は同じです。すべての可変個引数は、関数が受け取る前にデフォルトのプロモーションを受けます。