C Program to Calculate 2 numbers with 1 operation

How to write a C Program to Calculate 2 numbers with 1 operation in C Programming Language ?


Reverse Polish Notation - C Program to Calculate 2 numbers with 1 operation.

Solution:

  1. #include<stdio.h>
  2.  
  3. //calculate 2 numbers with 1 operation
  4. double calc (char operator, double a, double b) {
  5.         double result = 0;
  6.        
  7.         switch (operator) {
  8.                 case '+':
  9.                         result = a + b;
  10.                         break;
  11.                 case '-':
  12.                         result = a - b;
  13.                         break;
  14.                 case '*':
  15.                         result = a * b;
  16.                         break;
  17.                 case '/':
  18.                         result = a / b;
  19.                         break;
  20.         }
  21.  
  22.         printf("[DEBUG] %lf %lf %c = %lf\n", a, b, operator, result);
  23.  
  24.         return result;
  25. }
  26.  
  27. int main (void) {
  28.         //declare new char array in c style
  29.         char term[256] = {0};
  30.  
  31.         //declare variable for result
  32.         double result = 0;
  33.  
  34.         printf("Please insert your calculation: \n");
  35.  
  36.         //read term from input stream stdin
  37.         fgets(term, 255, stdin);
  38.  
  39.         printf("Your input: %s\n", term);
  40.  
  41.         //declare variables for numbers between operation
  42.         double a = 0;
  43.         double b = 0;
  44.  
  45.         int k = 0;
  46.         char lastNumber[256] = {0};
  47.         int numberCounter = 0;
  48.         int lineSpaceCounter = 0;
  49.         int lastCharType = 0; //1 - number, 2 - operator
  50.  
  51.         //parse string
  52.         for (int i = 0; i < 256; i++) {
  53.                 //check if char is line break
  54.                 if (term[i] == '\n') {
  55.                         break;
  56.                 }
  57.  
  58.                 //converts '0' to 0, '1' to 1
  59.                 double number = term[i] - '0';
  60.  
  61.                 if (number >= 0 && number <= 9) {
  62.                         //its an number, add number to term
  63.                         lastNumber[k] = term[i];
  64.  
  65.                         //increment counter
  66.                         k++;
  67.  
  68.                         lineSpaceCounter = 0;
  69.                         lastCharType = 1;
  70.                 } else if (term[i] == ' ') {
  71.                         //its an line space, so save last number
  72.  
  73.                         //convert char array to integer
  74.                         double n = 0;
  75.  
  76.                         sscanf(lastNumber, "%lf", &n);
  77.                         printf("[DEBUG] %s %lf\n", lastNumber, n);
  78.  
  79.                         //save last number into a or b
  80.                         if (numberCounter == 0) {
  81.                                 //save lastNumber into a
  82.                                 a = n;
  83.                         } else {
  84.                                 //save lastNumber into b
  85.                                 b = n;
  86.                         }
  87.  
  88.                         //increment line space counter, break on 2 line spaces too
  89.                         lineSpaceCounter++;
  90.                         numberCounter++;
  91.                        
  92.                         //because an number size be more than 1 char, we need this counter variable
  93.                         k = 0;
  94.                 } else if (term[i] == '+' || term[i] == '-' || term[i] == '*' || term[i] == '/') {
  95.                         //its an operator, so calculate sub term
  96.                         result = calc(term[i], a, b);
  97.                         a = result;                    
  98.  
  99.                         numberCounter = 1;
  100.                         k = 0;
  101.  
  102.                         lineSpaceCounter = 0;
  103.                         lastCharType = 2;
  104.                 }
  105.         }
  106.  
  107.         //print result
  108.         printf("Result: %lf\n", result);
  109.        
  110.         return 0;
  111. }
  1. /*
  2. * Copyright (c) 2015 Justin Kuenzel, All Rights reserved.
  3. *
  4. * MIT License, https://opensource.org/licenses/MIT
  5. */


Learn More :