我正在尝试在代码中使用pow()函数来打印3升至2的幂。
我像这样在printf()语句中使用了pow函数。
printf("%d",pow(3,2));
输出:
0
但是,当我尝试先将其分配给变量然后打印时,它运行得很好。
int c;
c=pow(3,2);
printf("%d",c);
输出:
9
我也尝试过使用一个伪函数直接在printf()语句中返回整数,而且效果也很好。
如果是,那么第一句话出了什么问题?
答案 0 :(得分:3)
问题是格式说明符。 pow
返回一个double
,而%d
指定一个int
。
鉴于现有的体系结构数量以及大多数平台上'integral'和'floating point'的划分非常清楚,通常,您不能将函数返回double
的结果视为{ {1}}(格式字符串),并期望正确的输出。
将int
的结果分配给pow
(我认为是c
的结果,因为它与int
一起使用时,它起作用的原因是在那种情况下)您的编译器知道隐式转换结果,但是当变量类型的唯一指示是格式字符串时,编译器不知道。
解决方案:将%d
更改为%d
,或将%f
的结果显式转换为pow
。