恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

浮動小数点数を受けるtype変換指定子 on Visual Studio 2019

 [この記事はまだ書きかけです・・・]

 

以下の実験コードを書いてみました。

#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()に関する文書を調べる必要がありそうです。)