我制作了一个名为juice的功能,让顾客可以选择杯子尺寸 他们的果汁并返回价格或应付金额,但是当我选择switch语句的默认情况时它应该返回0但输出为2时出错。
#include <stdio.h>
int juice(char size , int qty){
int price =0;
switch(size){
//'s' for small size of cup
case 's':
printf("size small");
price =20*qty;
return price;
break;
//'m' for medium size of cup
case 'm':
printf("size medium");
price =30*qty;
return price;
break;
//'l' for large size of cup
case 'l':
printf("size large");
price =40*qty;
return price;
break;
//if costumer choose wrong size
default:
printf("choose proper size");
}
printf("\n%d", price);
}
int main()
{
int price =juice('d' ,5);
printf("\npayable is %i\n", price);
return 0;
}
输出:
choose proper size
0
payble is 2
答案 0 :(得分:3)
问题是该函数未在default
情况下返回。这是未定义的行为。
请注意,return price;
不需要使用以下break;
,这也会使代码难以阅读,因为您在每种情况下都设置了price
的值(除了default
)你可以将return price;
放在最后。最后,在default
情况下添加初始化语句。
像这样的东西
int juice(char size, int qty)
{
int price = 0;
switch (size) {
case 's': // 's' for small size of cup
printf("size small\n");
price = 20 * qty;
break;
case 'm': // 'm' for medium size of cup
printf("size medium\n");
price = 30 * qty;
break;
case 'l': // 'l' for large size of cup
printf("size large\n");
price = 40 * qty;
break;
default: // if costumer choose wrong size
printf("choose proper size\n");
price = -1; // Invalid value?
break;
}
return price;
}
此外,新行字符'\n'
意味着放在一行的末尾,IO流是行缓冲的,这样可以刷新流并创建一个新行,放置它更有意义。最后。