<分区>
我正在练习 K&R 书 4.2 中提供的 atof()
。但是,当我编译以下代码时,我得到了
1952.690000
代替
1237.88
试过了,还是不知道哪里不对。可能类型转换有问题?
#include <stdio.h>
#include <ctype.h>
double atof(char s[]) {
int i, sign;
double n, power;
for (i = 0; isspace(s[i]); ++i)
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '-' || s[i] == '+')
++i;
for (n = 0.0; isdigit(s[i]); ++i)
n += n * 10.0 + s[i] - '0';
if (s[i] == '.')
++i;
for (power = 1.0; isdigit(s[i]); ++i) {
n += n * 10.0 + s[i] - '0';
power *= 10.0;
}
return sign * n / power;
}
int main() {
char s[] = "1237.88";
printf("%lf", atof(s));
return 0;
}