实在找不到错,但结果显示是while循环里有问题。谁有时间帮忙纠错,感激不尽!
#include <stdio.h>int k=0,n=0;
int row,col;
char priority={
'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','=',
'>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','=',
};
/*简单的带括号的计算器,即输入一串表达式,求值*/
int In(char c,char *p){
int i;
for(i=0;i<7;i++)
if(c==p)
return 1;
else return 0;
}/*判断c是否为运算符*/
void push(char *p,char c){
p=c;
k++;
}
void pop(char *p,char *c){
k--;
*c=p;
}
void pushd(int *q,int a){
q=a;
n++;
}
void popd(int*q,int *a) {
n--;
*a=q;
}
char gettop(char *p,int g){
return p;
}
int gettopd(int *q,int l){
return q;
}
int detect(char c){
int i;
char op={'+','-','*','/','(',')','#'};
for(i=0;i<7;i++){
if(c=op)
return i;
}
}
char precede(char c,char f){
row=detect(c);
col=detect(f);
return priority;
}
int operate(int e,char theta,int b){
switch(theta){
case'+':
return (e+b);break;
case'-':
return (e-b);break;
case'*':
return (e*b);break;
case'/':
return (e/b);break;
}
}
int main(){
int a=0,b,e,j=0,h;char c,f,x,theta;
char C;push(C,'#');/*符号栈*/
char d;/*暂时存储字符,再转换成十进制数存入 栈D中*/
int D; c=getchar();/*数据栈*/
char OP={'+','-','*','/','(',')','#'};
while(c!='#'||gettop(C,k)!='#'){
if(!In(c,OP)){d=c;c=getchar();}/*判断是否在符号数组内,不在则用d数组存起来,为后来转变十进制用*/
else
{
for(h=0;h<j;h++)
a=a*10+(d-'0');
pushd(D,a);/*转化为十进制入栈*/
printf("%d\n",a); /*感觉这里有问题 加了这一句检测,发现这个while及 switch段有问题 ,不停地打印a=0*/
j=0;a=0;
switch(precede(gettop(C,k),c)){
case '<':
printf("%c\n",c);push(C,c);c=getchar();break;
case '=':
pop(C,&x); c=getchar();break;
case '>':
pop(C,&theta); popd(D,&b);popd(D,&e);
pushd(D,operate(e,theta,b));
break;
default :
break;
}
}
}
a=gettopd(D,n);
printf("%d\n",a);
getchar();
}
{:5_154:}看不下去了...一跑全是0啊... simon3322 发表于 2012-8-19 18:12 static/image/common/back.gif
看不下去了...一跑全是0啊...
是啊while 那里有问题找不出来 刚才我帮你DeBug了一下,用的是1+2#这个运算。发现那个小c变量一直都是‘+’变量,没改变。你的很多变量没有初始化,我看到各种乱码,而且你的堆栈操作都没进行检查,所以导致错误没有分析出来。我没看你的程序逻辑,所以就不帮你查错误在哪了。有问题再问 我表示我的计算器写了四百多行啊……你的这么精炼…… 镕羽 发表于 2012-8-19 18:24 static/image/common/back.gif
是啊while 那里有问题找不出来
看不出来具体有哪些问题,不过发现一些小问题了 镕羽 发表于 2012-8-19 18:24 static/image/common/back.gif
是啊while 那里有问题找不出来
查出来了,你gettop返回的char不对~ 镕羽 发表于 2012-8-19 18:24 static/image/common/back.gif
是啊while 那里有问题找不出来
查出来了,你gettop返回的char不对~ foolisheep 发表于 2012-8-19 19:02 static/image/common/back.gif
我表示我的计算器写了四百多行啊……你的这么精炼……
参照的严蔚敏书上的代码 simon3322 发表于 2012-8-19 19:19 static/image/common/back.gif
查出来了,你gettop返回的char不对~
该怎么弄? xw007110 发表于 2012-8-19 18:54 static/image/common/back.gif
刚才我帮你DeBug了一下,用的是1+2#这个运算。发现那个小c变量一直都是‘+’变量,没改变。你的很多变量没有 ...
好 谢谢这是参照严蔚敏的伪代码改的 镕羽 发表于 2012-8-19 19:22 static/image/common/back.gif
该怎么弄?
k值始终不对,gettop实现的问题吧? 掌握正确的调试技巧很重要,加油 只看到主函数开头!发现你的得到栈顶数据的两个函数不正确!你的k是栈顶的上一个!所以gettop中应return p[--g],gettopd也是如此! wkmatt 发表于 2012-8-22 23:44 static/image/common/back.gif
只看到主函数开头!发现你的得到栈顶数据的两个函数不正确!你的k是栈顶的上一个!所以gettop中应return p[ ...
嗯 谢谢 回头试试~~ 所以为什么要用
--g
而不用
g-1
呢
页:
[1]