当前位置: 首页 > 工具软件 > Switch > 使用案例 >

switch详解

桓智敏
2023-12-01

switch语句概述

switch与case/default搭配使用,使得有程序在满足switch判断条件下,走多条case分支的其中一条或多条,否则走default分支,这个switch语句常用情况;

switch语法详解

首先,先附上常用switch语法,再以此进行解析。代码如下所示

int main()
{
    switch (IntFlag)
    {
    case 1:cout<<"分支1\n"; break;
    case 2:cout<<"分支2\n"; break;
    default:cout << "默认分支\n";
    }
    return 0;
}

当前代码执行过程如下:
若intFlag==2,则
先走case 2分支,输出”分支2“,
然后执行break语句,结束switch语句,
最后执行return 0;

知识点1:switch详解,传参-变量类型

作为switch各种分支的判断条件,intFlag类型只能是整型,因为case只处理有如下两种表现形式
1,整型变量
2,返回值为整型变量的表达式或函数
首先,整型变量就包括了如下类型

> char : 字符类型,若case后为整型,则强制转换为整型
> short: 短整型,最终强制转换为整型
> int  : 整型,作为便准的switch参数传入
> 
> 错误类型传参:char*,float,double等,强转为整型是造成精度损失,
> 也不允许使用错误类型进行switch传参;

然后,表达式或函数的主要核心也是返回值类型-整型,不在赘述;

> 例如:
> 1,函数: int sum()
> 			{
>              return 2;
>           }
> 2,表达式:intx =1;传参为:5x+1    

知识点2:case详解,传参-常量类型

case只处理两种形式的数据类型
1,整型常量
2,字符型常量
首先,case核实为常量,与switch传进的实际参数进行数值匹配;

case匹配规则如下:

若case匹配数值为整型常量,则将switch的实参通过ascall码转换为整型后进行匹配
若case匹配数值为字符常量,则将switch的实参通过ascall码转换为字符型后进行匹配;

case匹配顺序如下:
1,若case语句后无break,return,go等跳出/结束语句,则根据先后顺序匹配,如下代码所示
若case语句匹配值之后,则依次执行当前case语句之后的所有操作,
若无case语句匹配值,则执行default语句后的操作;

    switch (IntFlag)
    {
    case 1:cout<<"分支1\n"; 
    case 2:cout<<"分支2\n"; 
    default:cout << "默认分支\n";
    }
(1)若IntFlag==1,则输出值为:
分支1
分支2
默认分支

(2)若IntFlag==2,则输出值为:
分支2
默认分支

(2)若IntFlag==3,则输出值为:
默认分支

1,若case语句后有break,return,go等跳出/结束语句,则根据先后顺序匹配,如下代码所示
(break与return的区别是跳出范围不同;
break是跳出switch语句,继续执行switch语句之后的操作;
return是跳出switch语句所在函数,继续执行switch语句所在函数后的操作)

switch (IntFlag)
    {
    case 1:cout << "分支1\n"; break;
    case 2:cout << "分支2\n"; return 0;
    case 0x31:cout<<"分支3\n"; break;
    default:cout << "默认分支\n"; break;
    }
(1)若IntFlag==1,则输出值为:
分支1

(2)若IntFlag==2,则输出值为:
分支2

(2)若IntFlag==3,则输出值为:
默认分支

知识点3:default详解
default语句在switch中是非必要的,也就是说switch允许不包含default语句;
它是当switch传参无法与任意一个case数值进行匹配时,则执行的默认(default)操作,

switch (IntFlag)
    {
    case 1:cout << "分支1\n"; break;
    case 2:cout << "分支2\n"; return 0;
    }
若IntFlag==3,则输出值为:(空)
无操作结束
 类似资料: