当我尝试打印电源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
类型。