为什么在有些程序中 的数值计算 用浮点型 会运行不了
而一旦 将其中所有的浮点型 改成 整型就 OK
谢!
例如:
这是一个计算器程序,例如输入12+2*3=
得出结果18; 注:其中有些printf语句是我用来测试用的,无太大意义。
#include <stdio.h>
#include <conio.h>
struct com
{
union
{
int num;
char sign;
}data;
struct com * next;
};
typedef struct com com;
void compute(com *pr,char s);
void Print(com *head);
main()
{
int flag=-1;
com *head,*p,*pr;
head=(com *)malloc(sizeof(com));
head->next=NULL;
pr=head;
do
{
p=(com *)malloc(sizeof(com));
if (p==NULL)
{
printf("not enough memory");
getch();
exit(0);
}
p->next=NULL;
pr->next=p;
flag*=-1;
if(flag==1)
{
scanf("%d",&p->data.num);
}
else
{
p->data.sign=getchar();
}
pr=p;
}while(p->data.sign!='=');
Print(head);
compute(head,'*');
compute(head,'+');
printf("%d",head->next->data.num);
getch();
}
void compute(com *pr,char s)
{
com *p;
pr=pr->next;
p=pr->next;
while(1)
{
if(s=='*')
{
if(p->data.sign=='*')
{
pr->data.num*=p->next->data.num;
printf("counting*\n");
}
else if(p->data.sign=='/')
{
pr->data.num/=p->next->data.num;
printf("counting /\n");
}
else
{
p=p->next->next;
pr=pr->next->next;
printf("junmping ");
if(p->data.sign=='=') break;
continue;
}
}
if(s=='+')
{
if(p->data.sign=='+')
{
pr->data.num+=p->next->data.num;
printf("counting + '%d' ",pr->data.num);
}
else
{
pr->data.num-=p->next->data.num;
printf("counting - '%d' ",pr->data.num);
}
}
pr->next=p->next->next;
free(p->next);
free(p);
p=pr->next;
if(p->data.sign=='=') break;
}
}
void Print(com *head)
{
com *p;
int flag=-1;
p=head;
do
{
p=p->next;
flag*=-1;
if(flag==1)
{
printf("%d",p->data.num);
}
else
{
printf("%c",p->data.sign);
}
}while(p->data.sign!='=');
}
以前一些简单的程序也碰到过 ,这个程序稍复杂点,
这个程序是可以正常运行的 ,但是如果把所有的int改成float %d改成%f
就会出错 。
请各位指教