战俘(1,0)returns 0?

pow(1,0) returns 0?

为什么会这样:

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

returns 0?我希望它 return 1.

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

对提供的参数类型使用不适当的格式说明符会导致 undefined behaviour。检查 C 标准 N1570 (C11) 的第 §7.21.6.1 章。 (是的,这与 C89 无关,恕我直言)

您需要将结果类型转换为 int as pow() returns double.

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

这给出了你想要的输出 1

注意:pow(a,b) 当 a 和 b 都是 integers 时给出正确的结果,因为在你的 case.But 中你需要 add 0.5 处理 [=] 时的结果15=] 以便结果 四舍五入到最接近的整数 .

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.

希望对你有帮助。