当我尝试打印电源function的结果时,我总是得到0

我是C的初学者,当我尝试写一些像这样的代码时:

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

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

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

我明白了:答案:24.0000

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

你看到的是未定义行为的结果。

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

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

任何事情都可能发生。

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

C11:7.21.6(第9页):

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

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

 double pow(double x, double y); 

因此,您需要%f来打印double类型。