当前位置: 代码迷 >> C语言 >> 看看这个程序哪里错了??
  详细解决方案

看看这个程序哪里错了??

热度:238   发布时间:2005-03-31 20:00:00.0
看看这个程序哪里错了??

看看这个程序哪里错了?? 一次进行一重运算,输入表达式以逆波兰式输入,如要进行“4+2”的运算,就输入“42+”!(引号不算) #include<stdio.h> #include<stdlib.h> #define MAX 40 int *p,*tos,*bos; void push(int i); int pop(void); int main() { char s[3]; int j=0,a,b; p=(int *)malloc(MAX*sizeof(int)); if(!p) { printf("Allocation Failure\n"); exit(1); } bos=p; tos=p+MAX-1; printf("Four Function Calculator\n"); printf("Enter 'q' to quit\n"); printf(":"); gets(s); do{ switch(s[j]) { case'+': { a=pop(); b=pop(); printf("%d\n",b+a); push(b+a); break; } case'-': { a=pop(); b=pop(); printf("%d\n",b-a); push(b-a); break; } case'*': { a=pop(); b=pop(); printf("%d\n",b*a); push(b*a); break; } case'/': { a=pop(); b=pop(); if(a==0) { printf("Divide by 0.\n"); break; } printf("%d\n",b/a); push(b/a); break; } default: push(s[j]);break; } j++; }while(s[j]!='\0'&&j<3); a=pop(); printf("Current value on the stack:%d\n",a); return 0; }

void push(int i) { if(p>tos){ printf("Stack Full\n"); return; } *p=i; p++; } int pop(void) { p--; if(p<bos){ printf("Stack Underflow\n"); return 0; } return *p; }


----------------解决方案--------------------------------------------------------
写得好乱,可读性不好!

为什么不按常规来写栈?

也许你认为这样写一般人看不懂,看不懂就是好东西?
----------------解决方案--------------------------------------------------------

我自己已经改好了! #include<stdio.h> #include<stdlib.h> #define MAX 100 char *p,*tos,*bos; int push(int i); int pop(void); int main() { char s[80],a,b; p=(char *)malloc(MAX*sizeof(int)); if(!p) { printf("Allocation Failure\n"); exit(1); } bos=p; tos=p+MAX-1; printf("Four Function Calculator\n"); printf("Enter 'q' to quit\n"); do{ printf(":"); gets(s); switch(*s) { case'+': { a=pop(); b=pop(); printf("%d\n",b+a); push(b+a); break; } case'-': { a=pop(); b=pop(); printf("%d\n",b-a); push(b-a); break; } case'*': { a=pop(); b=pop(); printf("%d\n",b*a); push(b*a); break; } case'/': { a=pop(); b=pop(); if(a==0) { printf("Divide by 0.\n"); break; } printf("%d\n",b/a); push(b/a); break; } case'=': { a=pop(); push(a); printf("Current value on the stack:%d\n",a); } default: push(atoi(s));break; } }while(*s!='q'); return 0; }

int push(int i) { if(p>tos){ printf("Stack Full\n"); return 0; } *p=i; p++; return 1; } int pop(void) { p--; if(p<bos){ printf("Stack Underflow\n"); return 0; } return *p; }


----------------解决方案--------------------------------------------------------
  相关解决方案