[ create a new paste ] login | about

Link: http://codepad.org/oTQvZQbi    [ raw code | output | fork ]

C, pasted on Jul 17:
#include <stdio.h>
#include <stdlib.h>
#define MAXBUF 5

int sp = 0;     
int buf[MAXBUF];

int push(int f)
{
  if (sp < MAXBUF) {
    buf[sp++] = f;
    return 0;
  } else {
    return 1;
  }
}

int pop(int *rc)
{
  if (sp > 0) {
    *rc = buf[--sp];
    return 0;
  } else {
    return -1;
  }
}

void print_stack(void)
{
  int i;
  putchar('\n');
  for(i = MAXBUF-1; i >= 0; --i){
    i >= sp ? printf("     |     |\n") : printf("     |%5d|\n", buf[i]);
  }
  printf("     +-----+\n");
}


int main(void)
{
  int v1, v2, val;
  char c[2];
  int menu;
  do{
    printf("(1)Number (2)Operator (0)Result and Exit :");
    if (scanf("%d", &menu) != 1) {
      menu = -1;
      while (getchar() != '\n')
    ;
    }
    switch(menu){
    case 1:
      printf("Number: ");
      scanf("%d", &val);
      if (push(val))
        printf("Stack Overflow!\n");
      print_stack();
      break;
    case 2:
      printf("Operator: ");
      scanf("%1s", c);
      if (pop(&v1)) {
        printf("Stack is Empty!\n");
        break;
      }
      if (pop(&v2)) {
        printf("Stack is Empty!\n");
        break;
      }
      switch (c[0]) {
      case '+':
        push(v2 + v1);
        break;
      case '-':
        push(v2 - v1);
        break;
      case '*':
        push(v2 * v1);
        break;
      case '/':
        if (v1 == 0) {
          printf("Stack is Empty!\nStack Pop is failed!\n");
          push(v2);
          push(v1);
          break;
        }
        push(v2 / v1);
        break;
      default:
        printf("Bad operator.\n");
        push(v2);
        push(v1);
      }
      print_stack();
      break;
    case 0:
      if (pop(&val)) {
        printf("Stack is Empty!\n");
        break;
      }
      printf("Result = %d\n", val);
      break;
    default:
      menu = -1;
      break;
    }
  } while(menu != 0);

  return 0;
}

/* end */


Output:
1
Timeout


Create a new paste based on this one


Comments: