C で次のようなコードがあるとします:
double var;
scanf("%lf", &var);
printf("%lf", var);
printf("%f", var);
stdin 変数 'var' から読み取り、stdout 'var' に 2 回出力します。
stdin から double 変数を読み取る方法は理解できますが、私の質問は次のとおりです:
- %lf で double を出力できるのはなぜですか?
- %f で double を出力できるのはなぜですか?
- どちらを使用するのが適切で正しいですか?
答え:
printf
のような可変引数関数の場合 と scanf
、引数が昇格されます。たとえば、より小さな整数型は int
に昇格されます 、 float
double
に昇格 .
scanf
はポインターのパラメーターを受け取るため、プロモーション ルールは効果がありません。 %f
を使用する必要があります float*
の場合 と %lf
double*
の場合 .
printf
float
は表示されません 引数、float
常に double
に昇格 .フォーマット指定子は %f
です .しかし、C99 は %lf
とも言います %f
と同じです printf
で :