1

为什么会这样:

printf("%d\n", pow(1,0)); /* outputs 0 */

回报0?我希望它会回来1

4

2 回答 2

11

pow()返回一个double类型。您需要使用%f格式说明符来打印double.

对提供的参数类型使用不适当的格式说明符会导致 未定义的行为。检查 C 标准 N1570 ( C11) 的第 7.21.6.1 章。(是的,这与 IMHO 无关C89

于 2015-06-05T14:56:51.597 回答
1

您需要将结果类型转换为 int,因为 pow() 返回 double。

printf("%d\n",(int) pow(1,0));

这给了你想要的输出 1

注意:pow(a,b)当 a 和 b 都与您的情况一样时,会给出正确的结果。但是在处理时integers您需要对结果进行四舍五入,以便将结果四舍五入到最接近的整数add 0.5fractions

printf("%d\n",(int) (pow(2.1,0.9)))// will return 1. 

printf("%d\n",(int) (pow(2.1,0.9)+0.5));//will return 2.

希望它可以帮助你。

于 2015-06-05T15:07:51.277 回答