这是一个关于求算术表达式的程序,为什么每次我一运行输入表达式后都没有结果出来,也没有提示错误????求各位帮帮忙啊。。。。。。。。先谢谢咯!!
#include <iostream.h>
#include <string.h>
#include <math.h>
template <class t>
class stack
{
private:
int size;
int top;
t *data;
public:
stack(int =20);
~stack()
{
delete [] data;
}
void push(t e);
t pop();
int empty() const
{
return top==0;
}
};
template <class t>
stack<t>::stack(int s)
{
size=s>0&&s<100 ? s:20;
top=0;
data=new t [size+1];
}
template <class t>
void stack<t>::push(t e)
{
if(top!=size)
data[++top]=e;
}
template <class t>
t stack<t>::pop()
{
if(empty()!=0)
return data[top--];
else return 0;
}
char proceed(char ch1,char ch2)
{ char r;
switch(ch1)
{
case '+':case '-':switch(ch2)
{
case '*':case '/':case '(':case '^':r='<';break;
default:r='>';
}break;
case '*':case '/':switch(ch2)
{
case '(':case '^':r='<';break;
default:r='>';
}break;
case '(':switch(ch2)
{
case ')':r='=';break;
case '#':r='f';break;
default:r='<';
}break;
case ')':switch(ch2)
{
case '(':r='f'; break;
default:r='>';
}break;
case '^':switch(ch2)
{
case '(':r='<';break;
default:r='>';
}break;
case '#':switch(ch2)
{
case ')':r='f';break;
case '#':r='=';break;
default:r='<';
}break;
}
return r;
}
double calculate(double a,char ch,double b)
{
double r;
switch(ch)
{
case '+':r=a+b;break;
case '-':r=a-b;break;
case '*':r=a*b;break;
case '/':if(b==0) cout<<"除数不能为0";break;
r=a/b;break;
case '^':r=pow(a,b);break;
}
return r;
}
void main()
{
stack<double> s_num(50);
stack<char> s_opr(50);
int i=0;
double r,a,b;
char p[20],s[20],j;
cin>>p;
s_opr.push('#');
strcat(p,"#");
j=s_opr.pop();
while(j!='#'||p[i]!='#')
{
if(p[i]>='0'&&p[i]<='9'||p[i]=='.')
{
int k=0;
while(p[i]>='0'&&p[i]<='9'||p[i]=='.')
s[k++]=p[i++];
s[k]='\0';
r=atof(s);
s_num.push(r);
}
else
switch(proceed(j,p[i]))
{
case '<':s_opr.push(j);j=p[i];i++;break;
case '=':i++;j=s_opr.pop();break;
case '>':b=s_num.pop();
a=s_num.pop();
r=calculate(a,j,b);
s_num.push(r);
j=s_opr.pop();
break;
case 'f':break;
}
}
cout<<"算术表达式的值为:"<<s_num.pop();
}