许多数学函数使用double类型,下面以字符串转换为浮点数的函数atof_s()为例来说明。该函数能够处理正负尾数和正负指数格式的输入字符串。
#include<stdio.h>
#include<ctype.h>
#include<math.h>
#define MAXLINE 100
int getline(char s[],int lim);//输入一行
int main() {
double sum=0;
double atof_s(char s[]);//数字字符串转换为double类型
char line[MAXLINE];
while(getline(line,MAXLINE)>0) {
printf("\t%g\n",sum+=atof_s(line));//较短的输出宽度
sum=0; //准备记录下一行的值
}
return 0;
}
double atof_s(char s[]) {
double val,power,tail;
int i,sign;
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;
}
tail=sign*val/power;//得到尾数
if(s[i]=='e'||s[i]=='E')//指数判断
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');//指数部分
return tail*pow(10,sign*val);
}
getline()函数参见https://blog.csdn.net/qiu_shaofeng/article/details/106410789