[この記事はまだ書きかけです・・・]
以下の実験コードを書いてみました。
#include <stdio.h> int main(void) { double uho; scanf("%f", &uho); printf("%f", uho); return 0; }
このコードをビルドしようとしたら、以下のメッセージが表示されました。
warning C4477 : 'scanf' : 書式文字列 '%f' には、型 'float *' の引数が必要ですが、可変個引数 1 は型 'double *' です 書式文字列に '%lf' を使用することをお勧めします
どうやら、scanf()においてdouble型を受け取る場合、「%lf」とする必要があるみたいです。一方、printf()においては「%f」のままでも問題無さそうです。
リンク先の文書を読むと、printf()において、「f」はdouble型に、「lf」はlong double型に使えるようですが、上述したコンパイラのメッセージによると、scanf()で「%f」はfloat型の引数を想定するようです。
この違いは何なのでしょうか???(scanf()に関する文書を調べる必要がありそうです。)