switch与case/default搭配使用,使得有程序在满足switch判断条件下,走多条case分支的其中一条或多条,否则走default分支,这个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,则输出值为:(空)
无操作结束