我是C的初学者,当我尝试编写类似的代码时:
printf("\n Answer : %d \n", 12* pow(2,1));
我总是得到答案:0 但是当我写成像这样的浮点数时:
printf("\n Answer : %f \n", 12* pow(2,1));
我得到:答案:24.0000
有没有人知道为什么会这样? 我的意思是为什么0在十进制打印? 非常感谢。
答案 0 :(得分:5)
您看到的是Undefined Behaviour的结果。
printf
所期望的类型与传递的类型不匹配。
说明符"%d"
必须与int
类型的值匹配,但与您在表达式中提供的double
类型值匹配。
任何事情都可能发生。
答案 1 :(得分:3)
使用错误的说明符调用未定义的行为。结果可以是预期的或意外的。 %d
用于int
类型。
如果转换规范无效,则行为未定义。 282)如果任何参数不是相应转换规范的正确类型,则行为未定义。
pow
返回double
类型。它的签名是
double pow(double x, double y);
因此,您需要%f
来打印double
类型。