1
#include <stdio.h>
int main()
{
    char operator;
    double num1, num2, sum, mult, div, subtract, percentage;
    

    do
    {
        printf("Enter a operator :\n");
        printf("Click '+' for Addition\n");
        printf("Click '-' for Subtraction\n");
        printf("Click '*' for Multiplication\n");
        printf("Click '/' for Division\n");
        printf("Click '%%' for Percentage\n");
        printf("Click '0' for Exit\n");
        scanf("%c", &operator);
        printf("Enter any two numbers\n");
        scanf("%lf%lf", &num1, &num2);

        switch (operator)
        {
        case ('+'):
            sum = num1 + num2;
            printf("The sum of %.2lf and %.2lf is %.2lf\n", num1, num2, sum);
            break;
        case ('-'):
            subtract = num1 - num2;
            printf("The substraction of %.2lf and %.2lf is %.2lf\n", num1, num2, subtract);
            break;
        case ('*'):
            mult = num1 + num2;
            printf("The multiplication of %.2lf and %.2lf is %.2lf\n", num1, num2, mult);
            break;
        case ('/'):
            div = num1 / num2;
            printf("The division of %.2lf and %.2lf is %.2lf\n", num1, num2, div);
            break;
        case ('%'):
            percentage = (num1 / num2) * 100;
            printf("The percentage of %.2lf and %.2lf is %.2lf %%\n", num1, num2, percentage);
            break;
        default:
            printf("Invalid number, try a valid number\n");
        }
    } while (operator!= '0');

    return 0;
}

What did I try?

  • I am trying to make a repeating calculator program using switch case and do while loop (for repeating the same program.)

What am I expecting?

  • I am expecting the calculator to repeat and ask the user whether the user wants to continue using the calculator or not.

What in reality is happening?

  • At 1st compilation, everything works properly and the calculator runs. But, during the second compilation, the program is not scanning 'operator' and directly jumping to 'enter the numbers'.
Rahul VP
  • 23
  • 3
  • 1
    Try `scanf(" %c", &operator);` - note the space before the %. [scanf("%c") call seems to be skipped](https://stackoverflow.com/a/29775377) – 001 Dec 14 '22 at 15:29
  • 1
    Does this answer your question? [scanf() leaves the newline character in the buffer](https://stackoverflow.com/questions/5240789/scanf-leaves-the-newline-character-in-the-buffer) – Andreas Wenzel Dec 14 '22 at 16:04

1 Answers1

1

As already answered by Johnny Mopp and Andreas Wenzel, your scanf("%c", &operator); call reads the newline (\n) from the scanf("%lf%lf", &num1, &num2); that ran in the previous iteration of the loop.

You can change the call to include a space before the %c specifier in the format string to allow the scanf() function to skip any leading whitespace characters in the input buffer.

It should look like the following:

scanf(" %c", &operator);

Additionally, in your multiplication calculation, you used the + operator instead of *.

shahar
  • 355
  • 2
  • 18