请解释一下这个程序到底是什么问题,我是新的

时间:2014-09-30 09:56:34

标签: c scanf

我正在开关操作员的帮助下制作加法,减法,除法和乘法程序。在这里,我想制作一个程序,只有当用户输入任何其他字符而不是'Y'时才会停止。问题是:当我运行程序时,在相应案例的结果之后它只打印'你想继续',然后程序停止。请帮忙!先感谢您! :)

#include<stdio.h>
int main() {
    int n,a,b;
    char answer;
    while(1)  {
        printf("enter \n1.Addition \n2.subtraction \n3.division \n4.multiplication\t");
        scanf("%d",&n);
        switch(n)  {
            case 1:   {
                printf("enter value of a and b:\t");
                scanf("%d %d",&a,&b);
                printf("addition of %d+%d is %d",a,b,a+b);
                goto ans;
            }
            case 2:  {
                printf("enter the value of a and b:\t");
                scanf("%d %d",&a,&b);
                printf("Subtraction of %d-%d is %d",a,b,a-b);
                goto ans;
            }
            case 3:  {
                printf("enter the value of a and b:\t");
                scanf("%d %d",&a,&b);
                printf("Division of %*% is %d",a,b,a/b);
                goto ans;
            }
            case 4:  {
                printf("enter the value of a nad b:\t");
                scanf("%d %d",&a,&b);
                printf("Multiplication of %d*%d is %d",a,b,a*b);
                goto ans;
            }
            default:  printf("invalid value!");
            goto ans;
        }
        ans:  {
            printf("Do you want to continue?(Y/N):\t");
            scanf("%c",&answer);
            if(answer=='Y')  continue;
            else  break;
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:3)

而不是这个

scanf("%c",&answer);

尝试使用它:

scanf(" %c",&answer);

格式字符串中的空白占用空格,包括换行符,并读取第一个非空白字符。

答案 1 :(得分:2)

您是scanf处理新行的受害者: scanf() leaves the new line char in buffer?

特别是:
scanf函数在尝试解析字符以外的内容之前会自动删除空格。字符格式(主要是%c)是例外(它们不会删除空格),这是您在上一次扫描中的情况。