【问题标题】:warning: format ‘%f’ expects argument of type ‘float ’, but argument 2 has type ‘double ’警告:格式“%f”需要“float”类型的参数,但参数 2 的类型为“double”
【发布时间】:2022-01-06 16:49:22
【问题描述】:

每个人。 我需要帮助! 我试图在 HackerRank 的挑战之后提交这个: 任务 给定一餐的餐费(餐费的基本成本)、小费百分比(作为小费添加的餐费百分比)和税费百分比(作为税款添加的餐费百分比),查找并打印一餐的总费用。将结果四舍五入到最接近的整数。

#include <stdio.h>
#include <math.h>
int main()

{
    int tax,tip;
    double mealc;
    
scanf("%f",&mealc);
scanf("d",&tip);
scanf("%d",&tax);
mealc = mealc+(mealc*tip/100))+(mealc*tax/100);
printf ("%d",round(mealc));

    return 0;
}

编译上面的代码后。我总是收到这些错误:

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

Hk2.c:37:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]

有什么问题?

【问题讨论】:

  • 为什么你认为scanf("%f",&amp;mealc) 是正确的,你认为警告信息试图告诉你什么?
  • %f 格式化 float 类型,因此需要传递给 scanf 的参数应该是浮点数
  • 在这两种情况下都使用%lf
  • scanf("d",&amp;tip); 你忘了%
  • 你使用了double类型是对的;在大多数情况下它是可取的(而不是使用float,这通常太不精确)。所以赞成 Wiliam Pursell 的评论,忽略 Rafaelplayerxd 和 Tzatziki 的评论。

标签: c double scanf conversion-specifier


【解决方案1】:

正如警告消息所说,转换说明符 %f 被指定用于输入 float 类型的对象的值,而不是 double 类型的对象。

要为double 类型的对象输入值,您需要使用转换说明符%lf

scanf("%lf",&mealc);

另外你在这个电话中有一个错字

scanf("d",&tip);

你需要写

scanf("%d",&tip);

在此声明中

mealc = mealc+(mealc*tip/100))+(mealc*tax/100);

有一个多余的右括号。你需要写

mealc = mealc+(mealc*tip/100)+(mealc*tax/100);

【讨论】:

  • ` #include #include int main() { int tax,tip;双餐; scanf("%lf",&mealc); scanf("%d",&tip); scanf("%d",&tax); mealc = mealc+(mealctip/100)+(mealctax/100); printf ("%f",round(mealc));返回0; } ` 是的,它工作得很好,但结果是浮点类型。当我更改类型时,我得到了同样的错误。
  • 如果您担心最后的打印输出包含小数点,请使用%.0f,或者使用%d(int)round(mealc)
  • 谢谢,成功了..
  • "%f""%lf"有什么区别?
  • @Cyclone 与函数 scanf 一起使用,转换说明符 %f 需要一个指向 float 类型对象的指针,而转换说明符 %lf 需要一个指向 double 类型对象的指针。
【解决方案2】:

将 mealc 更改为浮动。在你第二次 scanf 时,你错过了一个 %: scanf("%d",&tip);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多