C程序 - 基本计算器

时间:2015-03-10 18:10:47

标签: c while-loop char conditional

我正在尝试用C编写一个基本的计算器程序,我几乎就在那里!我有一个问题,它涉及反复查询用户输入。

我可以通过我的循环一次,但即使用户输入了正确的字符,我的程序仍然会脱离循环。

我是C的新手,但我在Java中做了大量的编程,所以我理解了循环,条件和数据类型的功能。

#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;
}

2 个答案:

答案 0 :(得分:4)

您需要使用尾随换行符,在stdin缓冲区中输入遗骸,准备好由下一个scanf读取。

更改

scanf("%c", &yes);

scanf(" %c", &yes);

答案 1 :(得分:1)

问题是在输入数字后,换行符留在输入上以选择要执行的操作。因此,当询问用户是否要再次执行此操作时,将使用换行符而不是y或n。我可能错了,因为我做了一些编程已经有一段时间了。 对我来说解决问题的方法是在行

之后添加一些代码
printf("\nAgain (Y/N): ");

在printf语句之后立即添加此位将从输入中删除换行符并应该这样做。

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

也许其他人可以解释为什么这有效,我不记得具体细节。这是我发现有用的一件小事,它不时出现。