Scanf/Printf double 変数 C



C で次のようなコードがあるとします:


double var;
scanf("%lf", &var);
printf("%lf", var);
printf("%f", var);

stdin 変数 'var' から読み取り、stdout 'var' に 2 回出力します。
stdin から double 変数を読み取る方法は理解できますが、私の質問は次のとおりです:



  1. %lf で double を出力できるのはなぜですか?

  2. %f で double を出力できるのはなぜですか?

  3. どちらを使用するのが適切で正しいですか?


答え:


printf のような可変引数関数の場合 と scanf 、引数が昇格されます。たとえば、より小さな整数型は int に昇格されます 、 float double に昇格 .


scanf はポインターのパラメーターを受け取るため、プロモーション ルールは効果がありません。 %f を使用する必要があります float* の場合 と %lf double* の場合 .


printf float は表示されません 引数、float 常に double に昇格 .フォーマット指定子は %f です .しかし、C99 は %lf とも言います %f と同じです printf で :