【问题标题】:C Program - Basic CalculatorC 程序 - 基本计算器
【发布时间】:2015-05-12 07:46:03
【问题描述】:

我正在尝试用 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;
}

【问题讨论】:

    标签: c while-loop char conditional


    【解决方案1】:

    您需要使用尾随换行符,输入保留在stdin 缓冲区中,以供下一个scanf 读取。

    改变

    scanf("%c", &yes);
    

    scanf(" %c", &yes);
    

    【讨论】:

    • 当用户输入return时,会引入一个\n。添加一个空格可以解决这个问题。
    【解决方案2】:

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

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

    在 printf 语句之后添加这个位将从输入中删除换行符,应该可以解决问题。

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

    也许其他人可以确切地解释为什么会这样,我不记得具体细节了。这是一件我觉得很有用的小事,它会时不时出现。

    【讨论】:

    • 注意:while(getchar() != '\n') 是一个无限循环应该getchar() 返回EOF。最好同时测试EOF'\n'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多