#include<math.h>
#include<stdio.h>
#include <ctype.h>
double atof(char s[]);
int main(int argc, char const *argv[])
{
char s[]="165.56E+2";
printf("%lf",atof(s));
return 0;
}
double atof(char s[])//将字符串s转换相应的双精度浮点数
{
double val,power;
int i,sign,z=1;
for(i=0;isspace(s[i]);i++);
sign=(s[i]=='-')?-1:1;
if(s[i]=='+'||s[i]=='-'){
i++;
}
for(val=0.0;isdigit(s[i]);i++){
val=10.0*val+(s[i]-'0');
}
if(s[i]=='.'){
i++;
}
for(power=1.0;isdigit(s[i]);i++){
val=10.0*val+(s[i]-'0');
power*=10;
}
if(s[i]=='e'||s[i]=='E'){ //如果后面带有科学表示法的数,例如123.56e-6
switch(s[++i]){
case '+':
z=z*pow(10.0,(s[++i]-'0'));
break;
case '-':
z=z/pow(10.0,(s[++i]-'0'));
break;
}
}
return sign*val/power*z;
}
报错内容