您的位置:首页 > 其它

c programming language ___ 5_2.c

2014-05-16 15:22 190 查看
#include <stdio.h>
#include <ctype.h>
#define  BUG printf("here!bug!\n");

int getfloat(float *pn){
int c;
int t;
int intbeforepoint=0;
int intafterpoint=0;
int intafterpoint_lenth=0;
int inte;
int sign,esign;
int ppoint;  // 1 means there have point ,otherwise no
float res=0;

while( isspace(c=getch()) )
;
if(!isdigit(c)&&c!=EOF&&c!='+'&&c!='-'){
ungetch();
return 0;
}
sign=(c=='-')?-1:1;
if(c=='+'||c=='-')
c=getch();
for(intbeforepoint=0;isdigit(c);c=getch())
intbeforepoint=10*intbeforepoint+(c-'0');
ppoint=0;
if(c=='.'){
ppoint=1;
c=getch();
for(intafterpoint=0;isdigit(c);c=getch()){
intafterpoint=10*intafterpoint+(c-'0');
intafterpoint_lenth++;
}
t=intafterpoint;
while(t%10==0){
intafterpoint_lenth--;
t=t/10;
}
}
if(c=='e'||c=='E'){
c=getch();
esign=1;
if(c=='+'||c=='-'){
esign= (c=='+')?1:-1;
c=getch();
}
while( c=='0'){
c=getch();
}
for(inte=0;isdigit(c);c=getch())
inte=10*inte+(c-'0');
}
BUG;
if(c!=EOF)
ungetch(c);
res=1.0*intbeforepoint;
t=intafterpoint_lenth;
while(t--)
res*=10;
res+=intafterpoint;
t=intafterpoint_lenth;
while(t--)
res/=10;
if(esign==-1){
while(inte--)
res/=10;
}else if(esign==1){
while(inte--)
res*=10;
}
res*=sign;
*pn=res;
printf("intbeforepoint=%d\n",intbeforepoint);
printf("intafterpoint=%d\n",intafterpoint);
printf("inte=%d\n",inte);
printf("length=%d\n",intafterpoint_lenth);
return c;
}
int main(){
float num[10];
int i;
for(i=0;i<10;++i){
getfloat(&num[i]);
printf("%lf\n",num[i]);
}
return 0;
}


5_2.c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: