C++ Switch语句

384 阅读2分钟

启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

之前聊了C++的if语句,if语句可以判断一个条件的真假,但是在有些场景下,判断的结果也可能不是布尔值,如果不是布尔值,那么if判断就需要借助==这样的方法达成表达式,switch语句刚好适合这样的场景,所以我们来聊聊switch语句吧。

switch格式

以一个选举的案例来说,现在又三个候选人:

张三,李四,王五

#include <iostream>
#include <string>
​
using namespace std;
​
int main(){
    int zs = 0;
    int ls = 0;
    int ww = 0;
​
    char user;
    cin >> user;
​
    switch (user) {
        case 'z':
            ++zs;
            break;
        case 'l':
            ++ls;
            break;
        case 'w':
            ++ww;
            break;         
    }
    cout << "张三:" << zs << "  " << "李四:" << ls << "  " <<  "王五:" << ww << endl;
    /**/
    return 0;
}
​

switch的格式,switch关键字,然后是要判断的变量,下面就是case,每个case代表变量的一个值,如果满足一个case就执行case冒号下面的语句,执行完成后执行break语句,当然case可以有1到多个。

Switch注意点

switch本身是好理解的,但是还是有很多关键的点需要注意:

1、比较if语句来说,switch本身的功能并不是执行指定的一个case,而是顺着这个case直接往下执行,所以需要有break语句进行退出。

2、switch其实还有一个default关键字,用来处理所有case都没有成立的案例。

int age;
cin >> age;
​
switch (age) {
case 18:
    cout << "18岁了" << endl;
    break;
case 19:
    cout << "19岁了" << endl;
    break;
case 20:
    cout << "20岁了" << endl;
    break;
default:
    cout << "未成年" << endl;
    break;
}
​

3、switch要判断的数据类型其实也是有限制的,比如int,char类型是可以的,如果设置其他类型是不可以的,会在编译的时候直接报错(比如,字符串)。

4、break语句本事不是switch的一部分,是为了阻止switch的case执行成功后再往下执行其他case的语句,所以加入在case当中声明了一个变量,并且这个case没有被执行,下面是调用不到这个变量的。

最后和if语句做一下对比:

1、switch语句的判断变量必须是数字或者字符。而if语句的判断条件更加灵活多变,判断范围更广。

2、switch语句在执行一次判断条件之后,直接跳转到条件 语句,执行一次后如果没有遇到break则继续往下执行。 if语句如果一个条件执行成功,后面的条件就不再执行了。

3、分支较多的时候switch语句要比if语句的效率高一些,除非if语句在前几条就为真。 当然个人感觉if语句的可读性也不如switch语句。

关于switch我们就先聊这么多,还请各位大佬多多指点呀。