<div>#define _CRT_SECURE_NO_WARNINGS</div> <div><br></div> <div>#include<stdio.h></div> <div>#include<stdlib.h></div> <div>#include<string.h></div> <div><br></div> <div>#define MAX_STACK_SIZE 100 //스택 크기</div> <div>#define MAX_EXPR_SIZE 100 //식 크기</div> <div>typedef enum { lparen, rparen, plus, minus, times, divide, mod, eos, operand } precedence;</div> <div>int stack[MAX_STACK_SIZE];</div> <div>char expr[MAX_EXPR_SIZE];</div> <div>char exprt[MAX_EXPR_SIZE];</div> <div><br></div> <div>int eval();</div> <div>void postfix();</div> <div>char print_token(precedence); //precedence->우선순위</div> <div>precedence get_token(char*, int*);</div> <div>void add(int*, int); //추가</div> <div>int delete(int*); //삭제</div> <div>void stack_full(); //차있는 스택</div> <div>void stack_empty(); //비어있는 스택</div> <div><br></div> <div><br></div> <div>static int isp[] = { 0,19,12,12,13,13,13,0 };</div> <div>static int icp[] = { 20,19,12,12,13,13,13,0 };</div> <div><br></div> <div><br></div> <div>void main() {</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("잠깐\a!!! 문제를 내라 만약 어려우면 지나가게 해주지!!!크흐흐흐 : \n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>scanf("%s", expr);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>postfix(expr,exprt);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("expr =%s\n", expr);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("exprt=%s\n", exprt);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strcpy(exprt, expr);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("크흐흐 쉽구만 겨우 이정도 문제를 내다니 크ㅋ흐ㅋㅎㅋ흐 \n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("답은 %d다. 내가 맞췄으니 넌 내 먹이다 \'냠\'!!!", eval());</div> <div>}</div> <div><br></div> <div><br></div> <div>void postfix() //후위 표기식</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char symbol;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>precedence token;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int n = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int top = -1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>stack[++top] = eos;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (token = get_token(&symbol, &n); token != eos; token = get_token(&symbol, &n))</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (token == operand)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exprt[i++] = symbol;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else if (token == rparen)//괄호가 닫힐 때까지</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (stack[top] != lparen)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exprt[i++] = print_token(delete(&top));</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>delete(&top);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (isp[stack[top]] >= icp[token])</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exprt[i++] = print_token(delete(&top));</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, token);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while ((token = delete(&top)) != eos)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exprt[i++] = print_token(token);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exprt[i] = '\0';</div> <div><br></div> <div>}</div> <div><br></div> <div>char print_token(precedence t)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>switch (t)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case plus:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return '+';</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case minus:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return '-';</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case times:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return '*';</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case divide:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return '/';</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case mod:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return'%';</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return'\0';</div> <div>}</div> <div>int eval(void)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>precedence token;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char symbol;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int op1, op2; //지워진 값 기억하는 변수</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int n = 0; //문자열 수</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int top = -1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>token = get_token(&symbol, &n);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (token != eos)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (token == operand)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, symbol - '0'); //슬택에 추가</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>op2 = delete(&top);//삭제된 스택을 저장</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>op1 = delete(&top);// ||(위와 같다)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>switch (token)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case plus:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d %d + =%d\n", op1, op1, op1 + op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, op1 + op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case minus:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d %d - =%d\n", op1, op1, op1 - op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, op1 - op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case times:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d %d * =%d\n", op1, op1, op1 * op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, op1 * op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case divide:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d %d / =%d\n", op1, op1, op1 / op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, op1 / op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case mod:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d %d % =%d\n", op1, op1, op1 % op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>add(&top, op1 % op2);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>token = get_token(&symbol, &n);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return delete(&top); //결과를 돌려줌</div> <div>}</div> <div><br></div> <div>precedence get_token(char*symbol, int*n)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>*symbol = expr[(*n)++];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>switch (*symbol)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'(':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return lparen;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case')':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return rparen;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'+':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return plus;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'-':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return minus;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'*':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return times;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'/':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return divide;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'%':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return mod;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case'\0':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return eos;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>default:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return operand;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div>}</div> <div><br></div> <div><br></div> <div>void add(int *top, int item)//습택에 item추가</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (*top >= MAX_STACK_SIZE - 1)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>stack_full();</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>stack[++*top] = item;</div> <div>}</div> <div><br></div> <div>int delete(int*top)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (*top == -1)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>stack_empty();</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return stack[(*top)--];</div> <div>}</div> <div><br></div> <div>void stack_full()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>fprintf(stderr, "자리없다.임마 꽉 찻어\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exit(1);</div> <div>}</div> <div><br></div> <div>void stack_empty()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>fprintf(stderr, "아무것도 없다. 임마 비었어\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exit(1);</div> <div>}</div>
실행은 되는데 값이 달라요 도와주세요 ㅠㅠ  제가 c언어를 잘 못해서요...
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.