include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
... typedef int element;
typedef struct {
element stack[MAX_STACK_SIZE];
int top;
}StackType;
void init(StackType *s)
{
s->top = -1;
}
int is_empty(StackType *s)
{
return (s->top == -1);
}
int is_full(StackType *s)
{
return (s->top == (MAX_STACK_SIZE - 1));
}
void push(StackType *s, element item)
{
if (is_full(s)){
fprintf(stderr, "스택 포화 에러\n");
return;
}
else s->stack[++(s->top)] = item;
}
element pop(StackType *s)
{
if (is_empty(s)){
fprintf(stderr, "스택 공백 에러\n");
exit(1);
}
else return s->stack[(s->top)--];
}
element peek(StackType *s)
{
if (is_empty(s)){
fprintf(stderr, "스택 공백 에러\n");
exit(1);
}
else return s->stack[s->top];
}
int eval (char exp[])
{
int op1, op2, value;
int len = strlen(exp);
char ch, p1;
int n;
StackType s;
StackType p;
init(&s);
init(&p);
for(int i=0; i<len; i++){
ch = exp[i];
if(ch != '+' && ch != '-' && ch != '*' && ch != '/' && ch != ' ')
{
value = atoi(&exp[i]);
push(&s, value);
}
if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == ' ')
{
push(&p, ch);
}
if(ch == ')')
{ p1 = pop(&p);
op2 = pop(&s);
op1 = pop(&s);
switch(p1){
case '+' : push(&s, op1+op2); break;
case '-' : push(&s, op1-op2); break;
case '*' : push(&s, op1*op2); break;
case '/' : push(&s, op1/op2); break;
}
}
return pop(&s);
}
}
int main ()
{
char exp[100];
int value;
char ch;
int a;
//수식 입력 받기
printf("수식을 입력하세요\n");
for(a=0; ; a++)
{
scanf("%s",&exp[a]);
if(exp[a]==';')
break;
}
value = eval(exp);
}
수식을 문자열로 입력받아서
스택을 사용한 수식계산기를 만들어야하는데 계속 pop에서 오류가 나는 것 같네요 계속 스택 공백 에러라고 뜨네요/..
eval함수에서 뭔가가 잘못된거같은데 도저히 못찾겠습니다.
c고수님들 도와주세요~
위에 함수들은 스택함수고 밑에 eval은 수식계산함수입니다.
아 그리고 수식 문자열로 ( 9 + 10 ) 이런식으로 받을 껀데 저 함수가 맞는 건가요?