为什么它打印"应付2"虽然它应该是"应付0"

时间:2017-09-09 13:12:06

标签: c

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

1 个答案:

答案 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流是行缓冲的,这样可以刷新流并创建一个新行,放置它更有意义。最后。