《C程序設計語言》第二版練習4-2參考程序

//對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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章