//对atof函数进行扩展,使它能够处理形如123.45e-6的科学计数法,其中
//浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 1000
double atof(char s[]);
int getline(char s2[], int lim);
int main(void)
{
char s1[SIZE];
double result;
while (getline(s1, SIZE) > 0)
{
result = atof(s1);
printf("%lf\n", result);
}
system("pause");
return 0;
}
int getline(char s2[], int lim)
{
int i, c;
for (i = 0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; i++)
{
s2[i] = c;
}
if (c == '\n')
{
s2[i++] = c;
}
s2[i] = '\0';
return i;
}
double atof(char s[])
{
double val, power, index;
int i, sign, digit;
int flag = 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.0*power;
}
if (s[i] == 'e' || s[i] == 'E')
{
i++;
}
if (s[i] == '-')
{
i++;
flag = -1;
}
for (index = 1.0; isdigit(s[i]); i++)
{
for (digit = s[i] - '0'; digit > 0; digit--)
{
index = 10.0*index;
}
}
if (flag > 0)
{
return (sign*val / power) * index;
}
else
return sign*val / power / index;
}
《C程序设计语言》第二版练习4-2参考程序
最新推荐文章于 2020-06-14 23:38:29 发布