默认情况总是在这个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');
为什么?
答案 0 :(得分:1)
您以整数(%d)
扫描菜肴,然后将其视为一个字符(case 'A'
)。尝试将您的scanf作为%c
而不是
答案 1 :(得分:1)
如果dishes
是char
,则执行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将菜肴作为整数,但您的开关案例将其视为字符。