【问题标题】:When I try to print result of the power function I always get 0当我尝试打印幂函数的结果时,我总是得到 0
【发布时间】:2015-03-01 20:13:07
【问题描述】:

我是 C 的初学者,当我尝试编写类似的代码时:

printf("\n  Answer : %d \n", 12* pow(2,1));   

我总是得到答案:0 但是当我写成这样的浮点数时:

printf("\n  Answer : %f \n", 12* pow(2,1)); 

我得到:答案:24.0000

有人知道为什么会这样吗? 我的意思是为什么十进制打印为 0 ? 非常感谢。

【问题讨论】:

  • #include <stdio.h>,将编译器警告设置为尽可能高,并注意警告!
  • 为什么票数接近?这类问题有明确的答案,非常适合 SO。
  • 您可能想在这里 RTFM:man7.org/linux/man-pages/man3/printf.3.html(我多久阅读一次此页面,所以即使是初学者也可能会这样做?)
  • 顺便说一句。两个 printf 语句的转换说明符都尝试打印“decimals”。

标签: c printing


【解决方案1】:

你看到的是Undefined Behaviour的结果。

printf 期望的类型与传递的类型不匹配。

说明符"%d" 必须匹配int 类型的值,但匹配您在表达式中提供的double 类型的值。

任何事情都有可能发生。

【讨论】:

    【解决方案2】:

    使用错误的说明符会引发未定义的行为。结果可以是预期的,也可以是意外的。 %d 用于int 类型。

    C11:7.21.6(p9):

    如果转换规范无效,则行为未定义。282) 如果任何参数不是相应转换规范的正确类型,则行为未定义。

    pow 返回double 类型。它的签名是

    double pow(double x, double y);
    

    因此您需要%f 来打印double type。

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 2020-02-27
      • 2018-03-11
      • 2020-09-07
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多