web-dev-qa-db-ja.com

C学生の課題、「%f」はタイプ「float *」の引数を想定していますが、引数2のタイプは「double *」です。

課題に取り組んでいますが、次の警告が表示されます。

C4_4_44.c:173:2: warning: format ‘%f’ expects argument of type ‘float *’, 
but argument 2 has type ‘double *’ [-Wformat]

Variabledは、mainで次のように宣言されています。

double carpetCost;

私は関数を次のように呼び出しています:

getData(&length, &width, &discount, &carpetCost);

そして、これが機能です:

void getData(int *length, int *width, int *discount, double *carpetCost)

{

    // get length and width of room, discount % and carpetCost as input

    printf("Length of room (feet)? ");

    scanf("%d", length);

    printf("Width of room (feet)? ");

    scanf("%d", width);

    printf("Customer discount (percent)? ");

    scanf("%d", discount);

    printf("Cost per square foot (xxx.xx)? ");

    scanf("%f", carpetCost);

    return;

} // end getData

本はあなたが&を使用しないと言っているので、これは私を夢中にさせています

scanf("%f", carpetCost); 

渡した関数からアクセスする場合は参照してください。

私がここで間違っていることについて何か考えはありますか?

変化する

scanf("%f", carpetCost);

scanf("%lf", carpetCost);

%f変換仕様はfloat *引数に使用され、%lf引数にはdouble *が必要です。

8
ouah

%lf引数の代わりにdouble *指定を使用してください。

scanf("%lf", carpetCost); 
2
haccks
Use %lf instead of %f if you are scanning a double type of variable.
you can check this in detail also about %lf & %f from the discussed thread's link


http://stackoverflow.com/questions/210590/why-does-scanf-need-lf-for-doubles-when-printf-is-okay-with-just-f
1
RahulKT