#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#define MAX_STACK_SIZE 100

#define MAX_EXPR_SIZE 100


typedef enum {lparan, rparan, plus, minus, times, divide, mod, eos, operand}precedence;


char expr[MAX_EXPR_SIZE];

precedence stack[MAX_STACK_SIZE];

static int isp[] = { 0,19,12,12,13,13,13,0 };

static int icp[] = { 20,19,12,12,13,13,13,0 };


precedence get_token(char *symbol, int *n) {

*symbol = expr[(*n)++];

switch (*symbol) {

case '(':  return lparan;

case ')':  return rparan;

case '+':  return plus;

case '-':  return minus;

case '/':  return divide;

case '*':  return times;

case '%':  return mod;

case '\0':  return eos;

defalut :  return operand;

}

}


int top = 0;


void push(precedence item) {

stack[++top] = item;

}


precedence pop() {

return stack[top--];

}


void print_token(precedence token) {

switch (token) {

case plus: printf("+"); break;

case minus: printf("-"); break; ;

case divide: printf("/"); break ;

case times: printf("*"); break ;

case mod: printf("%"); break ;

defalut: printf(""); break;

}

}


void postfix() {

char symbol;

precedence token;

int n = 0;

stack[0] = eos;

for (token = get_token(&symbol, &n); token != eos; token = get_token(&symbol, &n)) { // 여기서 if문으로 안넘어가고 프로그램이 종료됨

if (token == operand) {                                                                      

printf("%c", symbol);

}

else if (token == rparan) {

while (stack[top] != lparan) {

print_token(pop());

}

pop();

}

else {

while (isp[stack[top]] >= icp[token]) {

print_token(pop());

}

push(token);

}

}

while ((token = pop()) != eos) {

print_token(token);

}

printf("\n");

}


int main() {

FILE* fp = fopen("in.txt", "r");

fscanf_s(fp, "%s", expr,MAX_EXPR_SIZE);

postfix();



fclose(fp);


}


뭐 에러가 나는것도 아니고 그냥 중간에 뚝 끊기니까 너무 갑갑해