#include #include #include #include #define STACK_SIZE 10 struct stack { float values[STACK_SIZE]; int size; }; void push_stack(struct stack* mystack, float value) { assert(mystack->sizevalues[mystack->size]=value; mystack->size+=1; } int switch_operators(const char input[]) { switch (input[0]) { case '+': return 0; break; case '-': return 0; break; case '*': return 0; break; case '/': return 0; break; default: return 1; break; } } float pop_stack(struct stack* mystack,const char input[]) { assert(mystack->size>1); float val1=mystack->values[mystack->size-2]; float val2=mystack->values[mystack->size-1]; switch (input[0]) { case '+': mystack->size-=2; return val1+val2; break; case '-': mystack->size-=2; return val1-val2; break; case '*': mystack->size-=2; return val1*val2; break; case '/': mystack->size-=2; return val1/val2; break; default: break; } } int count_stack(struct stack* stack) { } void print_stack(struct stack* mystack) { for(int i=0;isize;i++) { printf("%f",mystack->values[i]); if (isize-1) { printf(" "); } } printf("\n"); } int main() { struct stack mystack; memset(&mystack,0,sizeof(struct stack)); char input[1000]; while (fgets(input,sizeof(input),stdin)!=NULL) { int flag=switch_operators(input); input[strcspn(input,"\n")]=0; if (strlen(input)==0) { continue; } if (flag==0) { float op_num=pop_stack(&mystack,input); push_stack(&mystack,op_num); } else { char* ptr; float num=strtof(input,&ptr); push_stack(&mystack,num); } print_stack(&mystack); } return 0; }