Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
oorrja
GitHub Repository: oorrja/learntosolveit
Path: blob/master/languages/cprogs/Ex_4.2_atof_scientific.c
1240 views
1
/* Program demonstrating atof(char s[]).The function which converts the string to a floating
2
point value */
3
#include<stdio.h>
4
#include<ctype.h>
5
#define MAXLINE 100
6
7
double myatof(char s[]);
8
int mgetline(char line[],int maxline);
9
10
int main(void)
11
{
12
char str[MAXLINE];
13
double num;
14
mgetline(str,MAXLINE);
15
16
num=myatof(str);
17
printf("%f",num);
18
19
return 0;
20
}
21
22
double myatof(char s[])
23
{
24
double val,pow;
25
int sign,i,esign,exp;
26
int power(int base,int exp);
27
28
for(i=0;isspace(s[i]);i++)
29
;
30
31
sign=(s[i]=='-')?-1:1;
32
33
if(s[i]=='+' || s[i] == '-')
34
i++;
35
36
for(val=0.0;isdigit(s[i]);i++)
37
val = 10.0 * val + (s[i] - '0');
38
39
if(s[i]=='.')
40
i++;
41
42
for(pow=1.0;isdigit(s[i]);i++)
43
{
44
val = 10.0 * val + (s[i] - '0');
45
pow *= 10.0;
46
}
47
48
if(s[i]=='e' || s[i] =='E')
49
i++;
50
if(s[i]=='+' || s[i] =='-')
51
{
52
esign=s[i];
53
i++;
54
}
55
56
for(exp=0;isdigit(s[i]);i++)
57
exp=10.0 * exp + (s[i] - '0');
58
59
if( esign == '-')
60
return sign * (val / pow) / power(10,exp);
61
else
62
63
return sign * (val / pow) * power(10,exp);
64
}
65
66
int mgetline(char s[],int lim)
67
{
68
int i,c;
69
70
for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i)
71
s[i] = c;
72
73
if(c=='\n')
74
s[i++]=c;
75
76
s[i]='\0';
77
}
78
79
int power(int base,int exp)
80
{
81
int power;
82
power=1;
83
while(exp-- > 0)
84
power *=base;
85
86
return power;
87
}
88
89
90
91
92
93