为什么当 x 和 y 是字符时 pow(x,y) return inf?

Why does pow(x,y) return inf when x and y are chars?

我知道如何正确使用 pow() 我只是想知道为什么当我 运行 这段代码时 ans = inf。

我很难理解

这与 chars 只能取值 -128 到 +127 以及 pow() 的计算方式有什么关系吗?

这与我的第一个 scanf 参数中 " %c" 中的 space 有什么关系吗?

Linux 4.9.0-7-amd64 debian 4.9.110-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; 
}

当您使用 %c 输入 baseexp 时,您会得到 个字符 '0' - '9' ,而不是整数值。所以如果你输入 0 和 0,你得到的值(假设 ASCII 编码)实际上是 48,因为那是 '0' 的 ASCII 码。 4848 的结果大致是 5 x 1080.

然后将结果值保存在 float 中。假设 float 是 IEEE754 单精度,它可以容纳一个不大于 +/- 38 的指数。因此您正在尝试转换一个超出范围的值,该值会调用未定义的行为,这意味着结果是不可预测的。如果将 ans 的类型更改为 double,您将看到实际结果。

Baseexp 不是整数值 (0-9)。所以你要输入“%d”。不是“ %c”