Delfino
Delfino

Reputation: 1009

C Program - Basic Calculator

I'm trying to write a basic calculator program in C, and I'm almost there! I have one issue though, and it's concerning repeatedly querying the user for input.

I can get through my loop once, but even though the user inputs the correct character, my program still breaks out of the loop.

I'm fairly new to C, but I've done a decent amount of programming in Java, so I understand the functionality of loops, conditionals, and data types.

#include <stdio.h>

int main()
{
    char yes;
    int a, b, c, choice;

    yes = 'y';
    while(yes == 'y' || yes == 'Y')
    {
        printf("Enter first integer: ");
        scanf("%d", &a);

        printf("Enter second integer: ");
        scanf("%d", &b);

        printf("\nAdd(1), Subtract(2), Multiply(3), Divide(4): ");
        scanf("%d", &choice);

        printf("\n");
        switch(choice) 
        {
                case(1):
                    c = a + b;
                    printf("%d + %d = %d\n", a, b, c);
                    break;
                case(2):
                    c = a - b;
                    printf("%d - %d = %d\n", a, b, c);
                    break;
                case(3):
                    c = a * b;
                    printf("%d * %d = %d\n", a, b, c);
                    break;
                case(4):
                    c = a / (float)b;
                    printf("%d / %d = %d\n", a, b, c);
                    break;
                default:
                    printf("Incorrect choice. Try again.\n");
        }

        printf("\nAgain (Y/N): ");
        scanf("%c", &yes);
    }

    return 0;
}

Upvotes: 2

Views: 16357

Answers (2)

Zak.
Zak.

Reputation: 51

The problem is that the newline character is left on the input after inputting a number to choose what operation to do. So when the user is asked if they want to do it again, the newline is taken instead of the y or n. I might be wrong, it's been a while since I've done some programming. What worked for me to fix it was to put a little bit of code after the line

printf("\nAgain (Y/N): ");

Adding this bit right after the printf statement will remove the newline from the input and should do the trick.

while(getchar() != '\n')
   getchar();

Maybe someone else can explain exactly why this works, I don't remember the specifics. It's a little thing that I found useful to remember, it comes up every now and again.

Upvotes: 1

David Ranieri
David Ranieri

Reputation: 41017

You need to consume the trailling newline, enter remains in the stdin buffer ready to be read by the next scanf.

Change

scanf("%c", &yes);

to

scanf(" %c", &yes);

Upvotes: 4

Related Questions