问题遇到的现象和发生背景
栈模拟一个简单综合运算器,自己写出来的代码编译出的结果就非常离谱,不知道是哪里思路还是代码出现了问题。
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int judge(char ch)
{
if(ch=='*'||ch=='/')
return 1;
if(ch=='+'||ch=='-')
return 0;
}
int main()
{
int i,j;
float num=0;
int topA=-1,topB=-1;//栈顶下标
float a[100];//元素栈
char b[100];//符号栈
char s[100]="32*3/2+19*2-2";
for(i=0;i<strlen(s);i++)
{
if(s[i]>= '0' && s[i]<='9')
{
num=num*10+s[i]-'0';
}
else
{
a[++topA]=num;
num=0;
if(topB==-1)
b[++topB]=s[i];
else
{
if(judge(s[i])>b[topB])
{
b[++topB]=s[i];
}
else
{
if(b[topB]=='+')
{
a[topA-1]=a[topA-1]+a[topA];
topA-=1;
b[topB]=s[i];
}
if(b[topB]=='-')
{
a[topA-1]=a[topA-1]-a[topA];
topA-=1;
b[topB]=s[i];
}
if(b[topB]=='*')
{
a[topA-1]=a[topA-1]*a[topA];
topA-=1;
b[topB]=s[i];
}
if(b[topB]=='/')
{
a[topA-1]=a[topA-1]/a[topA];
topA-=1;
b[topB]=s[i];
}
}
}
}
}
i=topA;
printf("%d %d\n",topA,topB);
for(j=topB;j>=0;j--)
{
if(b[j]=='+')
{
a[i-1]=a[i-1]+a[i];
i--;
}
if(b[j]=='-')
{
a[i-1]=a[i-1]-a[i];
i--;
}
if(b[j]=='*')
{
a[i-1]=a[i-1]*a[i];
i--;
}
if(b[j]=='/')
{
a[i-1]=a[i-1]/a[i];
i--;
}
}
printf("%f\n",a[0]);
}
运行结果及报错内容
其中我专门写了一个printf来看看遍历后的数据栈和符号栈topA和topB的值,结果topA=-2,topB=0.
为什么会这样呢?