战俘(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.
希望对你有帮助。
为什么会这样:
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.
希望对你有帮助。