User talk:2601:642:4200:680:2424:2268:2274:DBDE


 * 1) include 
 * 2) include 

int sp = 0;
 * 1) include 
 * 1) define MAXOP   100
 * 2) define NUMBER  '0'

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

double pop(void);

int main { int type; double op2; double popVector = 3.8;

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 divisor\n"); break; case '^': push(pow(pop, pop)); case '\n': printf("\t%.8g\n", pop); break; default: printf("error: unknown command %s\n", s); break; } }  return 0; }

double val[MAXVAL];
 * 1) define MAXVAL 100

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

/* pop: pop and return top value from stack */ double pop(void) { if (sp > 0) { return val[--sp]; } else { printf("error: stack empty \"   \"\n"); return 0.0; } }
 * 1) include 

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

/* getop: whatever */ int getop(char s[]) { int i, c;

i = 0; while ((s[0] = c = getch) == ' ' || c == '\t') ; s[1] = '\0'; if (!isdigit(c) && c != '.') return c; if (isdigit(c)) while(isdigit(s[++i] = c = getch)) ; if (c == '.') while(isdigit(s[++i] = c = getch)) ; s[i] = '\0'; if (c != EOF) ungetch(c); return NUMBER; }

char buf[BUFSIZE]; int bufp = 0;
 * 1) define BUFSIZE 100

int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar; }

void ungetch(int c) { if (bufp >= BUFSIZE) printf("ungetch: TOO MANY CHARACTERS!\n"); else buf[bufp++] = c; }