对atof函数进行扩充,使它可以处理形如 123.45e-6的科学表示法,其中,浮点数面可能会紧跟一个e或E以及一个指数(可能有正负号)。
#include<stdio.h>
int isdigital (char p);
float atof(char *p1);
int
main (int argc, char *argv[])
{
char s[100]={0};
gets(s);
printf("%f\n", atof(s));
return 0;
}
int isdigital (char p)
{
if(p>='0'&&p<='9')
return 1;
else return 0;
}
float atof(char *p1)
{
char *p2;
p2=p1;
float integer=0.0,decimals=1.0,index=1.0;
int sign,flag;
sign=*p2=='-'?-1:1;
while(isdigital(*p2)==1)
{
integer=integer*10+*p2-'0';
p2++;
}
if(*p2=='.') p2++;
while(isdigital(*p2)==1)
{
integer=integer*10+*p2-'0';
decimals*=10;
p2++;
}
if(*p2=='\0') return sign*integer/decimals;
else if(*p2++=='e'||*p2++=='E')
{
flag=*p2++=='-'?-1:1;
for(;isdigital(*p2)==1&&*p2>'0';(*p2)--)
{
index*=10;
}
}
p2++;
if(flag<0)
return sign*integer/(decimals*index);
else return sign*index*integer/decimals;
}