# K & R C Programs Exercise 7-5.

K and R C, Solution to Exercise 7-5:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition) . You can learn and solve K&R C Programs Exercise.
Rewrite the postfix calculator of chapter 4 to use scanf and/or sscanf to do the input number conversion.

`/************************************************************ You can use all the programs on  www.c-program-example.com* for personal and learning purposes. For permissions to use the* programs for commercial purposes,* contact [email protected]* To find more C programs, do visit www.c-program-example.com* and browse!* *                      Happy Coding***********************************************************/#include<stdio.h>#include<math.h>       /*for atof()*/#define MAXTOP 100     /* max size of operand or operator  */#define NUMBER  '0'    /* SIGNAL THAT A NUMBER WAS FOUND   */#define MAXVAL 100int gettop(char []);void push(double);double pop(void);int sp = 0;          /* Next free stack position. */double val[MAXVAL];  //reverse Polish calulatorint main(void){ 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("nError: Zero divissorn");   break;  case '%':   op2 = pop();   if(op2)    push(fmod(pop(), op2));   else    printf("nError: Division by zero!");   break;  case 'n':   printf("t%.8gn",pop());   break;   default:   printf("error: unknown command %sn", s);   break;  } } return 0;}/* Getop: get next operator or numeric operand. */int getop(char s[]){ int i = 0; int c; int rc; static char lastc[] = " "; sscanf(lastc,"%c", &c); lastc = ' '; /* Skip whitespace */ while((s = c ) == ' ' || c == 't')  if(scanf("%",&c) == EOF)   c = EOF; s = ''; /* Not a number but may contain a unary minus. */ if(!isdigit(c) && c != '.' )  return c;                if(isdigit(c))  do{   rc = scanf("%c",&c);   if(!isdigit(s[++i] = c))    break;  }while(rc != EOF)   if(c == '.')    do{     rc = scanf("%c",&c);     if(!isdigit(s[++i] = c))      break;    }while(rc != EOF)     s[i] = ''; if(rc != EOF)  lastc = c; return NUMBER;}/* push: push f onto stack. */void push(double f){ if(sp < MAXVAL)  val[sp++] = f; else  printf("nError: stack full can't push %gn", f);}/*pop: pop and return top value from stack.*/double pop(void){ if(sp > 0)  return val[--sp]; else {  printf("nError: stack emptyn");  return 0.0; }}`
`Read more c programsC BasicC StringsK and R C Programs Exercise`

You can easily select the code by double clicking on the code area above.