printf() では "%f" だけで済むのに、なぜ scanf() では double に "%lf" が必要なのでしょうか? 質問する

printf() では

引数が または のどちらであってもを使用できるのに、を読み込むときにで がscanf()必要なのはなぜですか?l%lfdoubleprintf()%fdoublefloat

コード例:

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

ベストアンサー1

C は、可変引数を取る関数の場合、float を double に昇格させるためです。ポインターはどこにも昇格されないため、 double を読み込むには%lf、、%lgまたは%le( %laC99 では または ) を使用する必要があります。

おすすめ記事