
把函数写出来加以解释
#include <stdio.h>
double atof(char s[])
{
double val, val2, power;
int sign, sign2, i, p;
//去掉字符串中的空格
for (i = 0; s[i]==' '; ++i)
;
//判断正负数 ,并将i指向下一个位置
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
//取浮点数的整数部分
for (val = 0.0; (s[i]>='0' && s[i]<='9') && s[i] != 0; ++i)
val = 10 * val + s[i] - '0';
//取小数点
if (s[i] == '.')
i++; //后一个位置
//取小数点后面数
for (power = 1.0; (s[i]>='0' && s[i]<='9') && s[i] != 0; ++i)
{
val = 10 * val + s[i] - '0';
power *= 10; //float 放大的倍数
}
val = sign * val / power;
//如果有e的话处理e后面的数字
if (s[i] == 'e' || s[i] == 'E')
{
i++;
sign2 = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for (val2 = 0.0; (s[i]>='0' && s[i]<='9') && s[i] != 0; ++i)
{
val2 = 10 * val2 + s[i] - '0';
}
p = 1;
for (i = 0; i < val2; i++)
p *= 10;
if (sign2 == -1)
return val / p;
else
return val * p;
}
return val;
}
#define MAXLINE 80
int main()
{
char s[MAXLINE];
scanf("%s", s);
printf("%f\n", atof(s));
return 0;
}