はわわーっ

はわわわわっ

逆ポーランド電卓みたいなやつ

Cで書いてみた。Cムズいな。。。

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#define STACK_SIZE 64
static int stack[STACK_SIZE];
static int stack_ptr = 0;

void error(char *s)
{
  fprintf(stderr, s);
  exit(1);
}

void push(int x)
{
  if (stack_ptr >= STACK_SIZE)
    error("stack overflow\n");
  stack[stack_ptr++] = x;
}

int pop(void)
{
  if (stack_ptr <= 0)
    error("stack underflow\n");
  return stack[--stack_ptr];
}

int empty(void)
{
  return stack_ptr == 0;
}


int main(void)
{
  int c;
  int x, y;
  while ((c = getchar()) != EOF) {
    if (isdigit(c)) {
      ungetc(c, stdin);
      scanf("%d", &x);
      push(x);
    } else {
      switch (c) {
        case '+':
          y = pop(); x = pop(); push(x + y);
          break;
        case '-':
          y = pop(); x = pop(); push(x - y);
          break;
        case '*':
          y = pop(); x = pop(); push(x * y);
          break;
        case ' ':
          /* Nop */
          break;
        case '\n':
          if (!empty())
            printf("answer = %d\n", pop());
          break;
        default:
          error("unknown character\n");
          break;
      }
    }
  }
  return 0;
}