📄 test4_.c
字号:
#include <stdio.h>#include <ctype.h>#include <stdlib.h>#define MAX 100static int stack[MAX];int sp = 0;int sp_copy = 0;char buf[20];int chack = 0;int pop(void);void push(int);int get_number(void);int volatile operate(void);void p (void);int main(){ int k = 0; char c; printf("please input\n"); c= getchar(); for(;c != '\n';) { if(k > 20) { printf("you in put is too lang\n"); return 0; } if(isspace(buf[k])) ; else { buf[k] = c; k++; } c = getchar(); } buf[k] = '\n'; printf("buf%s\n",buf); printf("res = %d\n",operate());} int volatile operate(){ int num; push (sp_copy); sp_copy = sp; for(;;) { if(isdigit(buf[chack])) { num = get_number(); push(num); } switch(buf[chack]) { case'+': {lab: chack++; if(buf[chack] == '(') { chack++; num = 0; num = operate(); push(num); break; } else { num = 0; num = get_number(); push(num); break; } } case'-': { if(buf[chack+1] == '-') { chack++; goto lab; } chack++; if(buf[chack] == '(') { chack++; num = 0; num = operate(); num = num * (-1); push(num); break; } else { num = 0; num = get_number(); num = num * (-1); push(num); break; } } case'*': { chack++; if(buf[chack] == '(') { chack++; num = 0; num = operate(); num = num * pop(); push(num); break; } else { num = 0; num = get_number(); num = num * pop(); push(num); break; } } case'/': { chack++; if(buf[chack] == '(') { chack++; num = 0; num = operate(); num = pop() / num; push(num); break; } else { num = 0; num = get_number(); num = pop() / num; push(num); break; } } case'(': { num = 0; chack++; num = operate(); push(num); break; } case')': { chack++; num = 0; for(;!(sp == (sp_copy));) { num = num + pop();// printf("num=%d\n",num); } sp_copy = pop(); return num; } case'\n': { num = 0; for(;!(sp == (sp_copy));) { num = num + pop();// printf("num=%d\n",num); } sp_copy = pop(); return num; } default: { printf("input error\n"); return 0; } } } }int get_number(void){ int temp = 0; int i; for(i=0;isdigit(buf[chack]);chack++) { temp = temp*10+(buf[chack] - '0'); } // printf("get=%d\n",temp); return temp;}void push(int f){ if (sp < MAX) { stack[sp++] = f; printf("push %d sp== %d ",f,sp); p(); } else ; // printf("stack full\n");}int pop(void){ if (sp >= 0) { sp--; printf("pop %d sp== %d ",stack[sp],sp); p(); return stack[sp]; } else {// printf("stack empty\n"); return 0; }}void p(void){ int i; printf(" : "); for(i = 0;i < sp;i++) printf("%d ",stack[i]); printf("\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -