【问题标题】:When to use %d and %f in C?何时在 C 中使用 %d 和 %f?
【发布时间】:2019-08-14 20:37:39
【问题描述】:

我是 C 编程新手,但在 Java 中表现不错,我的问题是我们什么时候使用 %d 和 %f?在什么情况下?例如,根据下面给出的代码块,如果我被要求取 (int)a*(float)y,我是把它当作 %d 还是当作 %f?

#include <stdio.h>

int main()
{
    int a = 2;
    float y= 1.5;
    printf("%d \n", a*y);  //do I take this?
    printf("%f", a*y);    //do I take this?
    return 0;
}

输出:

745417384
3.000000

【问题讨论】:

  • int*float 产生一个浮点数,所以显然你必须使用 %f

标签: c floating-point printf double


【解决方案1】:

对于printf%d 期望其对应参数的类型为int,其中%f 期望它的类型为floatdouble

涉及intfloat 的算术表达式的结果将是float,因此在这种情况下您需要使用%f

【讨论】:

    【解决方案2】:

    ‘%d’, ‘%i’:将整数打印为有符号十进制数。有关详细信息,请参阅整数转换。 ‘%d’ 和 ‘%i’ 是输出的同义词,但在与 scanf 一起用于输入时是不同的(参见输入转换表)。

    ‘%f’:以普通(定点)表示法打印浮点数。有关详细信息,请参阅浮点转换。

    来源:https://www.gnu.org/software/libc/manual/html_node/Table-of-Output-Conversions.html#Table-of-Output-Conversions

    其他转换也是可能的

    【讨论】:

      【解决方案3】:

      在这种情况下你必须使用 %f,否则你会得到一个奇怪的答案,就像你在代码中看到的那样

      【讨论】:

      • @phuclv:如果你要纠正别人,你应该清楚技术细节。 C 标准中没有规定程序必须 使用%f不得 使用%d 作为float 参数。相反,该标准所说的只是,如果%dfloat 一起使用,则该标准没有定义行为。这种区别很重要的一个原因是,C 标准被故意设计为允许甚至邀请扩展。它通常不会禁止程序做事,而是为扩展 C 语言的实现开放。
      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 2021-05-01
      • 2018-05-07
      • 2018-03-28
      相关资源
      最近更新 更多