不要求char"选择"在切换声明之前

时间:2014-07-11 07:59:28

标签: c char

此代码自行执行而不需要char"选择"在switch语句scanf("%c",&choose); switch(choose)之前进行进一步处理。

printf("enter option 1,2,3 or 4 \n\n");
scanf("%c",&choose); // why it not ask to input char
switch(choose)
{
    case '1': case '+':
    {
        printf("enter 1st value\n");
        scanf("%f",&a);
        printf("enter 2st value\n");
        scanf("%f",&b);
        c=a+b;
        printf("%f + %f = %f",a,b,c);
        break;
    }
    case '2': case '-':
    {
        printf("enter 1st value\n");
        scanf("%f",&a);
        printf("enter 2nd value\n");
        scanf("%f",&b);
        c=a-b;
        printf("%f - %f = %f",a,b,c);
        break;
    }
    case '3': case'*':
    {
        printf("enter 1st value\n");
        scanf("%f",&a);
        printf("enter 2nd value\n");
        scanf("%f",&b);
        c=a*b;
        printf("%f * %f = %f",a,b,c);
        break;
    }
}

3 个答案:

答案 0 :(得分:0)

可能是因为你之前已经输入了一些内容,所以缓冲区中还有未扫描的字符,这些#贪心" scanf()然后不停地扫描。

您应该检查scanf()的返回值,以了解它是否成功。

你应该切换到使用fgets()读取整行,然后解析它。这样,它更安全,更容易预测。

答案 1 :(得分:0)

我已经毫无问题地执行了它(它得到了"选择" char):

#include <stdio.h>
int main(int argc, char *argv ) {
        char choose;
        float a,b,c;
        printf("enter option 1,2,3 or 4 \n\n");
        scanf("%c",&choose); // why it not ask to input char
           switch(choose)
        {
            case '1': case '+':
                {
                            printf("enter 1st value\n");
                            scanf("%f",&a);
                            printf("enter 2st value\n");
                            scanf("%f",&b);
                            c=a+b;
                            printf("%f + %f = %f",a,b,c);
                            break;
                }
            case '2': case '-':
                {
                            printf("enter 1st value\n");
                            scanf("%f",&a);
                            printf("enter 2nd value\n");
                            scanf("%f",&b);
                            c=a-b;
                            printf("%f - %f = %f",a,b,c);
                            break;
                }
            case '3': case'*':
                {
                            printf("enter 1st value\n");
                            scanf("%f",&a);
                            printf("enter 2nd value\n");
                            scanf("%f",&b);
                            c=a*b;
                            printf("%f * %f = %f",a,b,c);
                            break;
                }
        }
        return 0;
}

可能是你之前没有读过的东西......

我猜你正在做类似的&#34; scanf(&#34;%c&#34;,&amp; choose);&#34;之前,所以下次阅读你会得到回车。

您可以尝试更改以下行:

scanf("%c",&choose);

有:

scanf("%c%*c",&choose);

...所以你放弃了\ n

如果这不能解决您的问题,也许您应该提供更多代码:)

答案 2 :(得分:0)

printf("enter option 1,2,3 or 4 \n\n");
scanf("%c",&choose); 

如果您在上面给出的代码之前使用任何scanf,那么在您的代码中,这种行为是预期的,因为前一个scanf读取输入缓冲区中的\n输入作为下一个scanf的输入。

要解决此问题,请在fflush(stream)之前使用scanf(...),这样可以解决问题。

 fflush(stdin);

或者您可以使用getchar()功能,这也可以解决您的问题。