| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 666 人关注过本帖
标题:[求助]解决一下程序运行没有结果
只看楼主 加入收藏
lzf0112
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2006-4-9
收藏
 问题点数:0 回复次数:8 
[求助]解决一下程序运行没有结果

这是一个关于求算术表达式的程序,为什么每次我一运行输入表达式后都没有结果出来,也没有提示错误????求各位帮帮忙啊。。。。。。。。先谢谢咯!!

#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();
}

搜索更多相关主题的帖子: 结果 运行 
2006-06-26 16:17
lzf0112
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2006-4-9
收藏
得分:0 
斑竹帮忙解决一下啊。。。。。。。。。。。。。。。。。。。
2006-06-26 16:59
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
因为你的代码实在让人不想看,你下次要问的话先把代码整理一下吧,你的代码的主要问题在proceed函数,我帮你稍微整理了一下:
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;
default: //这里应该添加一个default或者你的main中的j的值不应该出现0
}
return r;
}
从上面可以看出,对于参数ch1的switch中没有default,所以当没有符合ase中的条件的时候没有给r赋任何的值,当main函数中第一次循环,调用switch(proceed(j,p[i]))时,j的值为0,在proceed函数中不回匹配任何case条件,所以proceed(j,p[i])返回的值是不会匹配switch(proceed(j,p[i]))中的case的,所以产生死循环

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-26 17:19
lzf0112
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2006-4-9
收藏
得分:0 

斑竹还是不行啊~~~

2006-06-26 17:27
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

晕,问题所在已经指出来了,难道还要帮你解决?不要急,多改改调试几遍,自己解决问题才有成长


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-26 17:29
lzf0112
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2006-4-9
收藏
得分:0 
谢谢斑竹赐教,那我自己先调试一下,要是真的调试不出来,那还得麻烦斑竹指导。。。。。。。。。。
2006-06-26 17:33
lzf0112
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2006-4-9
收藏
得分:0 

斑竹,还是解决不了啊,真郁闷不知道错在哪里,望斑竹指教~~~

2006-06-26 21:54
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
你的stack写得有问题,导致j的值为0,你需要修改:
template <class t>
t stack<t>::pop()
{
if(!empty()) //这边你原来的判断条件有误
return data[top--];
else return 0;
}

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-27 09:15
lzf0112
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2006-4-9
收藏
得分:0 

晕,问题真的出在这啊,现在改一下就行了但是还是有一些逻辑错误,我自己慢慢调试。
谢谢斑竹的指点。。。。。

2006-06-27 10:06
快速回复:[求助]解决一下程序运行没有结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023892 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved