练习4-2,对atof函数进行扩充,使它可以处理形如123.456e-6的科学表示法,其中,浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号)

C程序设计语言,练习4-2

测试结果与代码如下,有bug欢迎指正!
练习4-2,对atof函数进行扩充,使它可以处理形如123.456e-6的科学表示法,其中,浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号)_第1张图片
代码:

#include 
#include 
#include 
#include 
#include 

double atof(char *s);

int main()
{
	char s[100];
	printf("输入带转换字符串:\n");
	scanf_s("%s",s,100*sizeof(char));
	printf("转换结果为:%g\n",atof(s));
	return 0;
}

double atof(char *s)
{
	double val,power;
	int i,sign,num;

	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 * val + (s[i] - '0');
	if(s[i] == 'e' || s[i] == 'E')
		goto exp;
	if(s[i] = '.')
		i++;
	for(power = 1.0; isdigit(s[i]); i++)
	{
		val = 10 * val + (s[i] - '0');
		power *= 10.0;
	}
	if(s[i] == 'e' || s[i] == 'E')
		goto exp;
	return sign * val / power;
exp:
	if(s[++i] == '-')
	{
		for(i++,num = 0; isdigit(s[i]); i++)
			num = 10 * num + (s[i] - '0');
		power = power * pow(10.0,num);
	}
	else
	{
		for(num = 0; isdigit(s[i]); i++)
			num = 10 * num + (s[i] - '0');
		power = power / pow(10.0,num);
	}
	return sign * val / power;
}

你可能感兴趣的:(练习4-2,对atof函数进行扩充,使它可以处理形如123.456e-6的科学表示法,其中,浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号))