색갈 다른 부분만 주석좀 달아주세요..진짜 2주동안 했는데..잘이해가 안되요...제가 군인이라 집중적으로 몇시간씩
할수가없어서 ㅠㅠ


#include<stdio.h>
#include<stdlib.h>  // for atof()

#define MAXOP 100 //max size of operand or operator
#define NUMBER '0' // signal that a number wes found

int getop(char []);
void push(double );
double pop(void);

//reverse polish calculator
main()
{
 int type;
 double op2;
 char s[MAXOP];

 while((type= getop(s))!=EOF){
  switch(type){
   case NUMBER:
    push(atof(s));
    break;
   case '+':
    push(pop() + pop());
    break;
   case '*':
    push(pop() * pop());
    break;
   case '-':
    op2 = pop();
    push(pop() - op2);
    break;
   case '/':
    op2=pop();
                                if(op2!=0.0)
     push(pop() / op2);
    else
     printf("error: zero dibisor\n");
    break;
   case '\n':
    printf("\t %.8g \n",pop());
    break;
   default:
    printf("error : unknown command %s\n",s);
    break;
   }
  }
  return 0;
}

 

#define MAXVAL 100 // maximum depth of val stack

int sp = 0; // next free stack position
double val[MAXVAL];

// PUSH : push f onto value stack
void push(double f)
{
 if(sp<MAXVAL)
  val[sp++] = f;
 else
  printf("%erro : stack full , can't push %g \n",f);
}

// pop : pop and return to p value from stack

double pop(void)
{
 if (sp > 0)
  return val[--sp];
 else{
  printf("error : stack empty \n");
  return 0.0;
 }
}

#include<ctype.h>

int getch(void);
void ungetch(int);

// getop : get next operator or numeric operand
int getop(char s[])
{
 int i,c;

 while((s[0] = c = getch()) == ' ' || c == '\t')  <--이부분 ~ 이해가 잘 아가서 그러는데요...주석좀 달아주세요..
  ;
 s[1] = '\0';
 if(!isdigit(c) && c != '.')
  return c; //not a number
 i=0;
 if(isdigit(c)) // collect integer part
  while(isdigit(s[++i] = c = getch()))
   ;
 if(c=='.') // collect fraction part
  while(isdigit(s[++i] = c = getch()))
   ;
 s[i]= '\0';
 if(c != EOF)
  ungetch(c);
 return NUMBER;
}

#define BUFSIZE 100

char buf[BUFSIZE]; // buffer for ungetch
int bufp = 0;  // next free position int buf

int getch(void)// get a (possibly pushed back) character
{
 return (bufp > 0 )? buf[--bufp] : getchar();
}

void ungetch(int c) // push character back on input
{
 if(bufp >= BUFSIZE)
  printf("ungetch: too many charcater \n");
 else
  buf[bufp++]=c;
}

이 게시물을..