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

时间:2015-03-01 20:13:08

标签: c printing

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

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

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

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

我得到:答案:24.0000

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

2 个答案:

答案 0 :(得分:5)

您看到的是Undefined Behaviour的结果。

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

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

任何事情都可能发生。

答案 1 :(得分:3)

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

C11:7.21.6(p9):

  

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

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

double pow(double x, double y);

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