switch也是c语言中用的比较多的分支语句,与我们经常用的if...else有很多不同的地方需要我们注意
1、并行选择
跟case与default的位置没有关系,如果有多条语句不需要用大括号,结束case或default语句后边必须要加break,否则会继续执行下面的case分支
int main()
{
int a;
while (1)
{
cout << "请输入数字:";
cin >> a;
switch (a)
{
case 0:
cout << "星期日" << endl;
case 1:
cout << "星期一" << endl;
case 2:
cout << "星期二" << endl;
case 3:
cout << "星期三" << endl;
case 4:
cout << "星期四" << endl;
default:
cout << "非人类日期" << endl;
cout << endl;
case 5:
cout << "星期五" << endl;
case 6:
cout << "星期六" << endl;
}
}
}
2、有多个case分支共用的情况
这种其实更适合与if...else语句,看具体的应用场合了
int month,year;
while (1)
{
cout << "请输入年份和月份:";
cin >> year>> month;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cout << year << "年" << month << "月有" << 31 << "天" << endl;
break;
case 4:
case 6:
case 9:
case 11:
cout << year << "年" << month << "月有" << 30 << "天" << endl;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
cout << year << "年" << month << "月有" << 29 << "天" << endl;
}
else
{
cout << year << "年" << month << "月有" << 28 << "天" << endl;
}
break;
default:
cout << "玩呢!" << endl;
break;
}
}
我听说有的编译器还支持这种写法:
//0~10之间的整数都执行
case 0 ... 10:
3、 switch内的分支
switch内如果还有分支语句,这种情况if...else判断一定要写在case或default分支内部而不能写在它们外面,写在外面则不起作用,请看下例:
int a, b = 8;
while (1)
{
cout << "请输入:";
cin >> a;
switch (a)
{
case 0:
{
break;
}
case 1:
{
break;
}
if (b != 8)
{
case 5:
{
cout << "a: " << a << endl;
cout << "b: " << b << endl;
break;
}
}
default:
{
cout << "不在此列" << endl;
}
b = 0;
}
}
b初始化为8,输入a为5时,按理说不应该输出a、b的值,但是他确实会输出:
正确的做法是把if判断写在内部,就像下面的这个例子
4、遇到break整个switch才结束
int a, b = 8;
while (1)
{
cout << "请输入:";
cin >> a;
switch (a)
{
case 0:
{
break;
}
case 1:
{
break;
}
case 5:
{
if (b != 0)
{
cout << "a: " << a << endl;
cout << "b: " << b << endl;
}
break;
}
default:
{
cout << "不在此列" << endl;
}
b = 0;
}
}
输入1后会遇到break,就不会执行最后的b=0,再次输入5会输出a、b的值:
输入其他的值不执行break,最后会执行最后的b=0,再次输入5就不会输出a、b的值: