• Index

switch 语句

Reads: 19

基础示例

当我们需要判断枚举变量是哪一个枚举项时,可以使用if (mymonth == month::january)。现在,我们换一个语法:switch语句。用法如下:

#include <iostream> // std::cout std::endl

enum class month // 定义数据类型month
{
    january, // 一月
    february, // 二月
    march, // 三月
    april, // 四月
    may, // 五月
    june, // 六月
    july, // 七月
    aguest, // 八月
    september, // 九月
    october, // 十月
    november, // 十一月
    december // 十二月
};

int main(void)
{
    auto mymonth = month::july; // 使用数据类型month声明变量并初始化为七月
    switch (mymonth) // 由上往下逐个匹配
    {
    case month::january: // 使用 "case 匹配项:" 来进行条件匹配(最后记得加冒号)
        std::cout << "一月" << std::endl;
        break; // 当执行到break时将跳出switch语句, 不再匹配和执行剩下的case
    case month::february:
        std::cout << "二月" << std::endl;
        break;
    case month::march:
        std::cout << "三月" << std::endl;
        break;
    case month::april:
        std::cout << "四月" << std::endl;
        break;
    case month::may:
        std::cout << "五月" << std::endl;
        break;
    case month::june:
        std::cout << "六月" << std::endl;
        break;
    case month::july:
        std::cout << "七月" << std::endl;
        break;
    case month::aguest:
        std::cout << "八月" << std::endl;
        break;
    case month::september:
        std::cout << "九月" << std::endl;
        break;
    case month::october:
        std::cout << "十月" << std::endl;
        break;
    case month::november:
        std::cout << "十一月" << std::endl;
        break;
    case month::december:
        std::cout << "十二月" << std::endl;
        break;
    default: // 没有其他情况了
        break;
    }
    return 0;
}

输出结果:

七月

基础讲解

代码中,由于auto mymonth = month::july;中的变量mymonth只用于switch语句,所以,可以使用带初始化的switch语句:

switch (auto mymonth = month::july; mymonth)
{
default:
    break;
}

switch语句是从上往下逐个判断,符合条件就执行case里面的代码,当遇到break就会跳出switch语句。那么,以下代码将打开新世界大门:

#include <iostream> // std::cout std::endl

enum class month // 定义数据类型month
{
    january, // 一月
    february, // 二月
    march, // 三月
    april, // 四月
    may, // 五月
    june, // 六月
    july, // 七月
    aguest, // 八月
    september, // 九月
    october, // 十月
    november, // 十一月
    december // 十二月
};

int main(void)
{
    switch (auto mymonth = month::aguest; mymonth)
    {
    case month::january:
    case month::february:
    case month::march: // 三个月共用同一个输出
        std::cout << "第一季度" << std::endl;
        break; // 当执行到break时将跳出switch语句, 不再匹配和执行剩下的case
    case month::april:
    case month::may:
    case month::june:
        std::cout << "第二季度" << std::endl;
        break;
    case month::july:
    case month::aguest:
    case month::september:
        std::cout << "第三季度" << std::endl;
        break;
    default: // 剩下没有用case写出来的月份
        std::cout << "第四季度" << std::endl;
        break;
    }
    return 0;
}

输出结果:

第三季度

注意:如果需要在case内声明变量, 则需要加{}

int main(void)
{
    switch (auto i = 0; i)
    {
    case 0: // 如果需要在case内声明变量, 则需要加{ }
    {
        int a = 0;
        break; // break也可以放在{ }外面
    }
    default:
        break;
    }
    return 0;
}

Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.