gpt4 book ai didi

c - 为什么它打印 "Payable 2"而它应该是“应付 0”

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:49 26 4
gpt4 key购买 nike

我做了一个名为 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

最佳答案

问题是函数在 default 情况下没有返回。那是未定义的行为。

请注意,return price; 使下面的 break; 变得不必要,而且它还使代码更难阅读,因为你正在设置 price 在每种情况下的值(value)(默认 除外)您只需将 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 流是行缓冲的,这样会刷新流并创建一个新行,它将 放在末尾更有意义。

关于c - 为什么它打印 "Payable 2"而它应该是“应付 0”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com