为什么我的switch语句总是进入默认情况?

时间:2015-11-25 06:21:50

标签: c switch-statement

默认情况总是在这个switch语句中执行,无论我在提示符处键入什么。 当我输入时,例如,' A'对于第二个问题,它打印出Invalid code entered

do{
    printf("Please enter the quantity of dishes.\n");
    scanf(" %d", &quantity);

    printf("Please enter the dishes code.\n");
    scanf("%d", &dishes);

    switch (dishes){
    case'A':case'a':sushiA(quantity);
        break;
    case'B':case'b':sushiB(quantity);
        break;
    case'C':case'c':sushiC(quantity);
        break;
    default:
        printf("Invalid code entered.\n");
        break;
    }

    printf("Do you still want to enter next dishes?[Y=Yes, N=No]\n");
    scanf(" %c", &answer);
} while (toupper(answer) == 'Y');

为什么?

3 个答案:

答案 0 :(得分:1)

您以整数(%d)扫描菜肴,然后将其视为一个字符(case 'A')。尝试将您的scanf作为%c而不是

进行

答案 1 :(得分:1)

如果disheschar,则执行scanf("%d", &dishes);是错误的。 它将错误的值扫描到变量中 - 数字,而不是字符代码。当你输入“A”时它可能不会扫描任何东西(零?),因为它需要一个数字 此外,由于不同的类型分配大小(sizeof(char) != sizeof(int)),它(可能)写入未分配的内存。

使用scanf("%c", &dishes)

<小时/> 附注:学习如何使用调试器。

答案 2 :(得分:0)

do{
printf("Please enter the quantity of dishes.\n");
scanf(" %d", &quantity);

printf("Please enter the dishes code.\n");
scanf("%c", &dishes);  //This line had an error

switch (dishes){
case'A':case'a':sushiA(quantity);
    break;
case'B':case'b':sushiB(quantity);
    break;
case'C':case'c':sushiC(quantity);
    break;
default:
    printf("Invalid code entered.\n");
    break;
}

printf("Do you still want to enter next dishes?[Y=Yes, N=No]\n");
scanf(" %c", &answer);
} while (toupper(answer) == 'Y');

您的scanf将菜肴作为整数,但您的开关案例将其视为字符。