这个程序是计算菜的价格。用户需要输入项目编号,它会根据他们选择的大小计算出菜的总价。但是,第二个开关案例(开关内部的案例(item_number))并没有按预期工作。它只适用于情况1,其他情况2-4不起作用,因此程序无法显示准确的价格。我绝对不能用if... else来做这个赋值,它必须用switch case。
#include <stdio.h>
int main()
{
int item_number, dish_quantity;
char dish_size;
float price, total;
//Display the menu
printf("\t\t\t\tMenu\t\t\t\t\n");
printf("--------------------------------------------------------------------\n");
printf("Item Number Dish\t\t\t Dish Size \n");
printf("\t\t\t\tSmall(RM) Medium(RM) Large(RM)\n");
printf("--------------------------------------------------------------------\n");
printf(" 1 Ikan Tenggiri 10.00 20.00 30.00\n");
printf(" 2 Ikan Pari 8.00 15.00 25.00\n");
printf(" 3 Ikan Jenahak 9.00 17.00 28.00\n");
printf(" 4 Daging 10.00 20.00 30.00\n");
printf("--------------------------------------------------------------------\n\n");
// Input from user
printf("Enter item number : ");
scanf("%d", &item_number);
printf("Enter dish size (S/M/L) : ");
scanf("%s", &dish_size);
printf("Enter dish quantity : ");
scanf("%d", &dish_quantity);
switch (item_number){
case 1: switch (dish_size){
case 's': case 'S': price = 10.00; break;
case 'm': case 'M': price = 20.00; break;
case 'l': case 'L': price = 30.00; break;}
case 2: switch (dish_size){
case 's': case 'S': price = 8.00; break;
case 'm': case 'M': price = 15.00; break;
case 'l': case 'L': price = 25.00; break;}
case 3: switch (dish_size){
case 's': case 'S': price = 9.00; break;
case 'm': case 'M': price = 17.00; break;
case 'l': case 'L': price = 28.00; break;}
case 4: switch (dish_size){
case 's': case 'S': price = 10.00; break;
case 'm': case 'M': price = 20.00; break;
case 'l': case 'L': price = 30.00; break;}
}
printf("Price per dish size : RM %.2f\n", price);
total = dish_quantity * price;
printf("Total charge : RM %.2f", total);
return 0;
}
3条答案
按热度按时间hl0ma9xz1#
break
语句只会中断最里面的switch
,而不会中断最外面的switch
。因此,外部switch
语句还需要break
语句:另一个问题是
将导致buffer overflow,因为
&dish_size
只有存储单个字符的空间,包括终止空字符。因此,只有足够的空间来存储空字符串。出于这个原因,我建议您将该行更改为以下内容:
这样,
scanf
将只尝试写入单个字符,而不是以null结尾的字符串。u0njafvf2#
你错过了休息时间;语句在外部大小写块中。
eanckbw93#
你需要一个break语句:
对于每个
switch
都包含一个default
案例总是一个好主意。