//對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參考程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.