| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 733 人关注过本帖
标题:[求助]我的这个程序怎么停不下来?
只看楼主 加入收藏
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
收藏
 问题点数:0 回复次数:7 
[求助]我的这个程序怎么停不下来?
#include "stdio.h"
#include <string.h>
#define OK 1
#define ERROR 0
#define NULL 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
typedef char SElemType;
typedef int Status;
char op[7]={'+','-','*','/','(',')','#'};
int precede[7][7]={1,1,-1,-1,-1,1,1,
1,1,-1,-1,-1,1,1,
1,1,1,1,-1,1,1,
1,1,1,1,-1,1,1,
-1,-1,-1,-1,-1,0,-2,
1,1,1,1,-2,1,1,
-1,-1,-1,-1,-1,-2,0};
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return OK;
}
char GetTop(SqStack *S)
{SElemType e;
if(S->top==S->base) return ERROR;
e=*(S->top-1);
return e;
}
Status Push(SqStack *S,SElemType e)
{
*S->top++=e;
return OK;
}
Status Pop(SqStack *S,SElemType *e)
{
if(S->top==S->base) return ERROR;
*e=*S->top; S->top--;
return OK;
}
Status In(char c,char op[])
{
int i;
for(i=0;i<7;i++)
if(c==op[i]) return 1;
return 0;
}
Status Compare(char a,char b)
{
int i,j;
for(i=0;i<7;i++)
if(a==op[i]) break;
for(j=0;j<7;j++)
if(b==op[j]) break;
return precede[i][j];
}
int operate(char *a,char *e,char *b)
{
switch(*e)
{
case'+': return *a+*b;
case'-': return *a-*b;
case'*': return (*a)*(*b);
case'/': return (*a)/(*b);
}
}
int main()
{
char c,*x=NULL,*a=NULL,*b=NULL,*theta=NULL;
SqStack *OPTR=NULL,*OPND=NULL;
InitStack(OPTR); Push(OPTR,'#');
InitStack(OPND);
c=getchar();
while(c!='#'||GetTop(OPTR)!='#')
{
if(!In(c,op)) {Push(OPND,c);c=getchar();}
else
{
switch(Compare(GetTop(OPTR),c))
{
case -1:
Push(OPTR,c); c=getchar();;
break;
case 0:
Pop(OPTR,x); c=getchar();
break;
case 1:
Pop(OPTR,theta);
Pop(OPND,b); Pop(OPND,a);
Push(OPND,operate(a,theta,b));
break;
}
}
}
printf("\n=%d",GetTop(OPND));
getch();
}
这是个简单的计算功能的程序,不过运行的时候怎么停不下来?
搜索更多相关主题的帖子: include 
2005-12-06 15:10
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
收藏
得分:0 
怎么没人帮忙啊

2005-12-06 22:46
本人已死
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2005-9-20
收藏
得分:0 
不是不想帮你,而是看到像这样的一堆代码我就会头晕(要养成写注释的好习惯)
#include "stdio.h"
#include <string.h>
#include <malloc.h>/*不知道你用什么编译器,反正我的不加这个就会报错*/
#define OK 1
#define ERROR 0
#define NULL 0  /*重复定义,删掉即可*/
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
typedef char SElemType;
typedef int Status;
char op[7]={'+','-','*','/','(',')','#'};
int precede[7][7]={1,1,-1,-1,-1,1,1,
1,1,-1,-1,-1,1,1,
1,1,1,1,-1,1,1,
1,1,1,1,-1,1,1,
-1,-1,-1,-1,-1,0,-2,
1,1,1,1,-2,1,1,
-1,-1,-1,-1,-1,-2,0};
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return OK;
}
char GetTop(SqStack *S)
{SElemType e;
if(S->top==S->base) return ERROR;
e=*(S->top-1);
return e;
}
Status Push(SqStack *S,SElemType e)
{
*S->top++=e;
return OK;
}
Status Pop(SqStack *S,SElemType *e)
{
if(S->top==S->base) return ERROR;
*e=*S->top; S->top--;
return OK;
}
Status In(char c,char op[])
{
int i;
for(i=0;i<7;i++)
if(c==op[i]) return 1;
return 0;
}
Status Compare(char a,char b)
{
int i,j;
for(i=0;i<7;i++)
if(a==op[i]) break;
for(j=0;j<7;j++)
if(b==op[j]) break;
return precede[i][j];
}
int operate(char *a,char *e,char *b)
{
switch(*e)
{
case'+': return *a+*b;
case'-': return *a-*b;
case'*': return (*a)*(*b);
case'/': return (*a)/(*b);
}
}
int main()
{
char c,*x=NULL,*a=NULL,*b=NULL,*theta=NULL;
SqStack *OPTR=NULL,*OPND=NULL; /*主要的错误就在这里,声明了两个指针,却没有给它们在内存中分配空间,直接调用InitStack()时,函数里面的语句S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));就会发生内存读写错误了,因为optr,opnd两指针是赋了NULL值的 ,就改了这么多,还有错误不想改了,因为不清楚程序具体是怎么实现计算功能的,嘿嘿,不想深看下去了,哎,你要是注释清楚点,帮你的人自然会多了 :)*/
InitStack(OPTR); Push(OPTR,'#');
InitStack(OPND);
c=getchar();
while(c!='#'||GetTop(OPTR)!='#')
{
if(!In(c,op)) {Push(OPND,c);c=getchar();}
else
{
switch(Compare(GetTop(OPTR),c))
{
case -1:
Push(OPTR,c); c=getchar();;/*多了个分号*/
break;
case 0:
Pop(OPTR,x); c=getchar();
break;
case 1:
Pop(OPTR,theta);
Pop(OPND,b); Pop(OPND,a);
Push(OPND,operate(a,theta,b));
break;
}
}
}
printf("\n=%d",GetTop(OPND));
getch(); /*最好加个void*/
return 0; /*最好加上*/

}


ps:本人很菜,可能说的不对,还请论坛各位高手指正,谢谢!
                  -----编程鬼,本人已死

[此贴子已经被作者于2005-12-7 2:19:27编辑过]


爸爸告诉我:女人喜欢有钱的男人;妈妈告诉我:女人喜欢有貌的男人。我翻翻钱包,又照照镜子,然后我哭了
2005-12-07 02:16
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
收藏
得分:0 
谢谢楼上的,我是在tc下运行的,所以没加注释。呵呵

2005-12-07 12:38
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
收藏
得分:0 

问题已经基本上解决了,再次谢谢二楼的哥们的指教。


2005-12-07 12:43
layabout
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2005-12-2
收藏
得分:0 
typedef char SElemType;
typedef int Status

为什么啊,难到char ,int 很难打吗::?

typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
这句用还差不多,问题不要复杂化啊,我门是菜鸟啊


学习不难!难的是一辈子兢兢业业,老老实实,勤勤恳恳的学习!!!
2005-12-07 22:32
本人已死
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2005-9-20
收藏
得分:0 

那样是为了方便程序的扩展,如果你要存储其它类型的,直接用typedef ** SElemType 就行了,省得到程序里面一个一个的改


爸爸告诉我:女人喜欢有钱的男人;妈妈告诉我:女人喜欢有貌的男人。我翻翻钱包,又照照镜子,然后我哭了
2005-12-07 23:28
等待
Rank: 1
等 级:新手上路
帖 子:173
专家分:0
注 册:2005-12-1
收藏
得分:0 

受益非浅


2005-12-07 23:53
快速回复:[求助]我的这个程序怎么停不下来?
数据加载中...
 
   



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

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