Path: blob/master/languages/cprogs/Ex_4.2_atof_scientific.c
1240 views
/* Program demonstrating atof(char s[]).The function which converts the string to a floating1point value */2#include<stdio.h>3#include<ctype.h>4#define MAXLINE 10056double myatof(char s[]);7int mgetline(char line[],int maxline);89int main(void)10{11char str[MAXLINE];12double num;13mgetline(str,MAXLINE);1415num=myatof(str);16printf("%f",num);1718return 0;19}2021double myatof(char s[])22{23double val,pow;24int sign,i,esign,exp;25int power(int base,int exp);2627for(i=0;isspace(s[i]);i++)28;2930sign=(s[i]=='-')?-1:1;3132if(s[i]=='+' || s[i] == '-')33i++;3435for(val=0.0;isdigit(s[i]);i++)36val = 10.0 * val + (s[i] - '0');3738if(s[i]=='.')39i++;4041for(pow=1.0;isdigit(s[i]);i++)42{43val = 10.0 * val + (s[i] - '0');44pow *= 10.0;45}4647if(s[i]=='e' || s[i] =='E')48i++;49if(s[i]=='+' || s[i] =='-')50{51esign=s[i];52i++;53}5455for(exp=0;isdigit(s[i]);i++)56exp=10.0 * exp + (s[i] - '0');5758if( esign == '-')59return sign * (val / pow) / power(10,exp);60else6162return sign * (val / pow) * power(10,exp);63}6465int mgetline(char s[],int lim)66{67int i,c;6869for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i)70s[i] = c;7172if(c=='\n')73s[i++]=c;7475s[i]='\0';76}7778int power(int base,int exp)79{80int power;81power=1;82while(exp-- > 0)83power *=base;8485return power;86}87888990919293