代码问题

def1981 2003-08-17 12:43:42
新人还不会找错误 设计一个简单计算器 使用递归
但是遇见括号 就不行了显示出错
#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);
}


...全文
26 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oopig 2003-08-17
  • 打赏
  • 举报
回复
你的这个程序比较乱,addsubt()里面调用multdiv(),multdiv()里面调用number(),然后number()里面又反过来调用addsubt(),另外expr和pos更是全局函数。。。一个字:晕
建议你把调用层次理顺,这样除错就容易多了。
oopig 2003-08-17
  • 打赏
  • 举报
回复
还有别的问题,一下子看不清楚。
oopig 2003-08-17
  • 打赏
  • 举报
回复
main()函数里的这一句有问题:
if (expr[pos]!='\0')
error();
应该是:
if (expr[++pos]!='\0')
error();
catface 2003-08-17
  • 打赏
  • 举报
回复
代码长了点 哪位好心 抽点时间看看
指教下下
catface 2003-08-17
  • 打赏
  • 举报
回复
呵呵 分不够用了马甲说话 ……
catface 2003-08-17
  • 打赏
  • 举报
回复
多谢OOPIG
在程序里退出的已经加了
因为不加() 就能通过并得出正确答案
麻烦在看下 谢谢

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧