求大神指点
#include<iostream>
using namespace std;
#include<stdio.h>
#include <stdlib.h>
const int Initsize=100;//栈的长度
int change1(char a)//由字符转换成数字
{
return ((int)a-48);
}
int change2(int a)//由数字转换成字符
{
return (char)(a+48);
}
class stack{
public:
char *base;//栈的基指针
char *top;//栈的顶指针
friend void initstack(stack &s);//构造栈
friend void push(stack &s,char a);//压入栈
friend int gettop(stack &s);//得到栈顶元素不删除
friend int pop(stack &s);//得到栈顶元素并删除
};
void initstack(stack &s)
{
s.base=new char[Initsize];
if(s.base)
s.top=s.base;
}
void push(stack &s,char a)
{
if(s.top-s.base<=Initsize)
{
*s.top=a;
s.top++;
}
else
exit(0);
}
int gettop(stack &s)
{
if(s.top==s.base)
exit(0);
char a=*(s.top-1);
return change1(a);
}
int pop(stack &s)
{
if(s.top==s.base)
exit(0);
char a=*(s.top--);
return change1(a);
}
int operatorsize(char a)//操作符的优先级
{
int n;
switch(a)
{
case '#':n=1;break;
case '(':n=2;break;
case '+':
case '-':n=3;break;
case '*':
case '/':n=4;break;
default:exit(1);
}
return n;
}
void operate(stack &s,char a)
{
switch(a)
{
case '+':push(s,change2(pop(s)+change1(a)));break;
case '-':push(s,change2(pop(s)-change1(a)));break;
case '*':push(s,change2(pop(s)*change1(a)));break;
case '/':push(s,change2(pop(s)/change1(a)));break;
case '#':break;
default:exit(1);break;
}
}
int main()
{
char c;
stack optr,opnd;
initstack(optr);push(optr,'#');
initstack(opnd);
cout<<"*********欢迎使用本系统**********"<<endl;
cout<<"请输入表达式: "<<endl;
c=getchar();
cout<<"计算结果是:";
while(c='#'||gettop(optr)!='#')
{
if(!operatorsize(c))
{
push(opnd,c);
}
else
{
int m,s,n;
s=operatorsize(gettop(optr));//栈顶操作数优先级
n=operatorsize(c);//当前操作数优先级
m=s-n;
if(m>0)
push(optr,c);
else if(m=0)
pop(optr);
else
{
operate(opnd,c);
pop(optr);
}
}
c=getchar();
}
cout<<change1(gettop(opnd));
return 0;
}
这是一个数值表达式求值问题,编译没错就是得不出结果,求大神指点
[解决办法]
int operatorsize(char a)中default:时候你直接退出了exit(1);
单步debug一下