C程序设计语言(第二版) 4-2

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

 

#include <ctype.h>  
#include <stdio.h>

#define MAXLINE 100
int getline(char line[], int max);

double atof(char s[])
{	int i;
	double val;
	double power;
	int sign;//用于标记+ - 号
	int flag=-1;//标记指数的正负
	int zhsh;//指数
	double powerzh;
	for(i=0;isspace(s[i]);i++)
		;
	if(s[i]=='-')
	{
		sign=-1;
		i++;
	}
	else if(s[i]=='+')
	{
		sign=1;
		i++;
	}
	else
	{
		sign=1;
	}
		
	for(val=0.0;isdigit(s[i]);i++)
	{
		val= val*10 + ( s[i]-'0');
	}

	if(s[i]=='.')
		i++;
	for(power=1.0;isdigit(s[i]);i++)
	{
		val = val*10 + (s[i]-'0');
		power = power*10;
	}

	val= sign*val/power;

	if(s[i]=='e'||s[i]=='E')
		i++;

	if(isdigit(s[i]))
		flag=1;
	else if (s[i]=='+')
	{
		flag=1;
		i++;
	}
	else if (s[i]=='-')
	{
		flag=-1;
		i++;
	}

	zhsh=s[i]-'0';☆☆☆
	powerzh=1.0;
	for(int count =0; count<zhsh;count++)
		powerzh = 10* powerzh;

	if(flag==1)
		val = val*powerzh;
	else if(flag==-1)
		val = 1.0*val/powerzh;

	return val;

}

/* getline:  get line into s, return length */
int getline(char s[], int lim)
{
	int c, i;
	i = 0;
	while (--lim > 0 && (c=getchar()) != EOF && c != '\n')
		s[i++] = c;
	s[i] = '\0';
	return i;
}

int main()
{
	double sum, atof(char []);
    char line[MAXLINE];
    int getline(char line[], int max);
    sum = 0;
    while (getline(line, MAXLINE) > 0)
		printf("\t%g\n", sum += atof(line));
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值