c语言之switch语句的用法及注意事项

本文通过LeetCode第860题柠檬水找零的示例,对比了C语言中switch与ifelse的使用。在多条件判断场景下,switch提供更整洁的代码结构,逻辑清晰,尽管在运行效率上两者相差无几。

关于C语言中我们做判断的时候一般是会想到if else,常见的if else的写法为:
if(表达书)
{}
else if(表表达式)
{}
else
{}
当出现更多的if else嵌套的时候通常会使我们的代码变的较为繁琐,使得我们在观看自己的代码的时候容易讲逻辑给混淆,故此次介绍一下switch的用法,switch的用法在代码中的运用广度没有if else 较强,但是在多个判断中可起到很关键的作用本次以leet第860题柠檬水找零为例子进行说明,下面两段代码:

bool lemonadeChange(int* bills, int billsSize){
    int mon[2]={0};
    for(int i=0;i<billsSize;i++)
    {
        switch(bills[i])
        {
            case 5:{mon[0]++;break;};
            case 10:
            {
                mon[0]--;
                mon[1]++;
                break;
            }
            case 20:
            {
                if(mon[1]>0)
                {
                    mon[1]--;
                    mon[0]--;
                }
                else mon[0]-=3;
                break;
            }
        }
        if(mon[0]<0) return false;
    }
    return true;
}
bool lemonadeChange(int* bills, int billsSize){
    int mon[2]={0};
    for(int i=0;i<billsSize;i++)
    {
        int temp=bills[i]-5;
        if(temp>0)
        {
            if(temp>5)
            {
                if(mon[1]!=0&&mon[0]!=0)
                {
                    mon[0]--;
                    mon[1]--;
                }  
                else if(mon[0]>=3)
                    mon[0]-=3;
                else return false;            
            }
            else 
            {
                if(mon[0]>0)
                {
                    mon[1]++;
                    mon[0]--;
                } 
                else
                    return false;
            }
        }
        else
            mon[0]++;
    }
    return true;    
}

上述两段代码分别为使用if else 与switch的代码的实例,两者在运行内存和速度上相差无几,但是switch的看起来更整洁,逻辑清晰。
注意:
1、在switch中有一点需要明确那就是在break的引用的问题,switch的操作中首先将case后的表达式与switch中括号的内容进行匹配,如果两者相等,则执行该case及下面的所有代码,知道执行完毕switch中的所有代码,而我们引用switch的目的只是需要执行其中的一个case,然后跳出switch,故在每个case的末尾需加入break将此次的switch跳出,若利用continue跳出case,依然会执行下面的case。
2、case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。
eg:
case ‘A’: printf(“…”); break; //正确,字符和整数可以相互转换。
case a: printf(“…”); break; //错误,不能包含变量
3、default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值