代码问题
新人还不会找错误 设计一个简单计算器 使用递归
但是遇见括号 就不行了显示出错
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <cctype>
int addsubt();
int multdiv();
int number();
void error();
static char expr[81];
static int pos;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
int ans;
do
{
pos=0;
std::cout<<"enter expreesion "
<<std::endl;
std::cin>>expr;
ans=addsubt();
if (expr[pos]!='\0')
error();
if (ans!=0)
std::cout<<ans<<std::endl;
}
while (ans!=0);
return 0;
}
//---------------------------------------------------------------------------
int addsubt()
{
int rtn=multdiv();
while (expr[pos]=='+'||expr[pos]=='-')
{
int op=expr[pos++];
int opr2=multdiv();
if (op=='+')
rtn+=opr2;
else
rtn-=opr2;
}
return rtn;
}
//---------------------------------------------------------------------------
int multdiv()
{
int rtn=number();
while (expr[pos]=='*'||expr[pos]=='/')
{
int op=expr[pos++];
int opr2=number();
if (op=='*')
rtn*=opr2;
else
rtn/=opr2;
}
return rtn;
}
//---------------------------------------------------------------------------
int number()
{
int rtn;
if (expr[pos]=='(')
{
pos++;
rtn=addsubt();
if (expr[pos]!=')')
error();
return rtn;
}
if (!std::isdigit(expr[pos]))
error();
rtn=std::atoi(expr+pos);
while (std::isdigit(expr[pos]))
pos++;
return rtn;
}
//---------------------------------------------------------------------------
void error()
{
std::cout<<'\r';
while (pos--)
std::cout<<' ';
std::cout<<"error"<<std::endl<<'\a';
std::exit(-1);
}