免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1161 | 回复: 3
打印 上一主题 下一主题

[C] 错误在哪里? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-10 23:29 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define add 43
#define subs 45
#define mult 42
#define div 47
#define MAXSIZE 100
typedef struct {
&nbsp;&nbsp;&nbsp;&nbsp;int stkdata[MAXSIZE];
&nbsp;&nbsp;&nbsp;&nbsp;int top ;
}STKzone;

typedef STKzone *STK;
typedef enum{true=1,false=0} bool;
typedef enum{ok,error} status;
STKzone expSTKzone;
STK expSTK;


/*执行栈的初始化,建栈指针*/
STK initSTK(STKzone *stack_zone) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STK p;
&nbsp;&nbsp;&nbsp;&nbsp;p = stack_zone;
&nbsp;&nbsp;&nbsp;&nbsp;p->top=0;
}
/*将一些结构型数据送入栈中*/
status push(int *term,STK pstk) {
&nbsp;&nbsp;&nbsp;&nbsp;if(pstk->top == MAXSIZE)  {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return error;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;pstk->stkdata[pstk->top] = *term;
&nbsp;&nbsp;&nbsp;&nbsp;(pstk->top)++;/*栈顶指针移动 */
&nbsp;&nbsp;&nbsp;&nbsp;return ok;

}
/*判定栈是否为空*/
bool emptySTK(STK pstk) {

&nbsp;&nbsp;&nbsp;&nbsp;return (pstk->top == 0);&nbsp;&nbsp;&nbsp;&nbsp;
}
/*从栈内出来一些数据结构 */
status pop(int *pdata, STK pstk) {

&nbsp;&nbsp;if(emptySTK(pstk))
&nbsp;&nbsp;&nbsp;&nbsp;return error;
&nbsp;&nbsp;(pstk->top)--;
&nbsp;&nbsp;*pdata = pstk->stkdata[pstk->top];
&nbsp;&nbsp;return ok;
}
void synerror(void) {
&nbsp;&nbsp;&nbsp;&nbsp;printf("n表达式语法错误");
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
}
int eval (char tag,int a1,int a2) {

&nbsp;&nbsp;&nbsp;&nbsp;switch(tag) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case add:return (a1+a2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case subs:return (a1-a2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case mult: return (a1*a2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case div: return (a1/a2);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}

}
int main() {
&nbsp;&nbsp;&nbsp;&nbsp;char c;
&nbsp;&nbsp;&nbsp;&nbsp;int opd1,opd2,temp,c1;
&nbsp;&nbsp;&nbsp;&nbsp;expSTK = initSTK(&expSTKzone);

&nbsp;&nbsp;&nbsp;&nbsp;printf("n后置表达式");
&nbsp;&nbsp;&nbsp;&nbsp;while((c=getchar())!= 'n') {
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;  if(c==' ') continue ;
&nbsp;&nbsp;&nbsp;&nbsp;  if((c>47)&&(c<58)) {
&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;putchar(c);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c1=c-48;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(push(&c1,expSTK)==error){/*运算夫进栈*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   printf("n表达式太长n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  exit(0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;  }else if((c == add) || (c == subs) || (c==mult)||(c==div)){
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;putchar(c);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pop(&opd1,expSTK) == error) synerror();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pop(&opd2,expSTK) == error) synerror();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp = eval(c,opd2,opd1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push(&temp,expSTK);
&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;  }else synerror();
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;if((pop(&opd1,expSTK)==error)) synerror();
&nbsp;&nbsp;&nbsp;&nbsp;if(!(emptySTK(expSTK))) synerror();
&nbsp;&nbsp;&nbsp;&nbsp;printf("=%-3dn",opd1);


谢谢,哪里错了?

}

论坛徽章:
0
2 [报告]
发表于 2009-03-10 23:32 |只看该作者
我想问你哪儿错了 好歹你帖一下 你发现的错误在哪儿嘛 我们好针对性的看嘛

论坛徽章:
0
3 [报告]
发表于 2009-03-10 23:34 |只看该作者
哦,不好意思哈,我gcc -o stack -c stack.c 生成的 stack 不是可执行 的文件

[ 本帖最后由 liufabin66688 于 2009-3-10 23:39 编辑 ]

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
4 [报告]
发表于 2009-03-11 08:50 |只看该作者
原帖由 liufabin66688 于 2009-3-10 23:34 发表
哦,不好意思哈,我gcc -o stack -c stack.c 生成的 stack 不是可执行 的文件

把-c去掉。
gcc -o stack  stack.c
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP