我了解如何正确使用pow()
,我只是想知道为什么当我运行这段代码ans
= inf时。
我很难理解this。
这与char只能使用-128到+127以及计算pow()
的方式有什么关系吗?
这和我的第一个" %c"
参数中的scanf
中的空格有关吗?
Linux 4.9.0-7-amd64 Debian的4.9.10-1 gcc版本6.3.020170516
#include <stdio.h>
#include <math.h>
int main ()
{
char base, exp;
float ans;
printf("Enter base number : ");
scanf(" %c", &base);
printf("Enter exp number : ");
scanf(" %c", &exp);
ans = pow(base,exp);
printf("%c raised to the %c power equals %f", base, exp, ans);
return 0;
}
答案 0 :(得分:5)
使用base
输入exp
和%c
时,会得到字符 '0'
-'9'
,而不是整数值。因此,如果输入0和0,则得到的值(假设ASCII编码)实际上将为48,因为这是'0'
的ASCII代码。 48 48 的结果大约是5 x 10 80 。
然后将结果值保存在float
中。假设float
是IEEE754单精度的,它可以保留不大于+/- 38的指数。因此,您尝试转换超出范围的值,该值调用未定义的行为,这意味着结果是不可预测的。如果将ans
的类型更改为double
,则会看到实际结果。
答案 1 :(得分:0)
基数和 exp 不是整数值(0-9)。因此,您要输入“%d”。不是“%c”