在实例10中,将break语句去掉之后,会将符合检验条件后的所有语句都输出。利用这个特点,可以设计多路开关模式的switch语句,例如:在平年一年12个月,1、3、5、7、8、10、12月是31天,4、6、9、11月是30天,2月是28天,如果在控制台上任意输入月份,就可以知道这个月有多少天。这种情况,就可以使用switch语句的多路开关模式,它的形式如下:

switch(表达式)
{
		case 1:
			语句1
			break;
		case 2:
		case 3:
			语句2
			break;
		…
		default:
			默认语句
			break;
} 

从形式中可以看到如果在case 2后不使用break语句,那么符合检验时与符合case 3检验时的效果是一样的。也就是说,使用多路开关模式,可以使多种检验条件用一个语句块输出。

实例11 输入的某个月份属于哪个季节

在本实例中,要求使用switch语句判断控制台输入的某个月份属于哪个季节,已知3、4、5月是春季,6、7、8月为夏季,9、10、11为秋季,12、1、2月为冬季。具体代码如下:

01 	#include<stdio.h>
02 	int main()
03 	{
04 	 	int month;                          				/*定义变量月份*/
05 	 	printf("please enter a month:\n");
06 	 	scanf("%d",&month);                 			/*输入月份*/
07 	     switch(month)                    				/*根据月份分季节*/
08 	     {
09 	     		/*多路开关模式*/
10 	       	case 3:
11 	       	case 4:    
12 	       	case 5:
13 	           	printf("%d is spring\n",month);		/*3,4,5月是春季*/
14 	           	break;
15 	        	/*多路开关模式*/
16 	       	case 6:
17 	       	case 7:    
18 	       	case 8:
19 	           	printf("%d is summer\n",month);		/*6,7,8月是夏季*/
20 	           	break;
21 	       	/*多路开关模式*/
22 	       	case 9:
23 	       	case 10:    
24 	       	case 11:
25 	           	printf("%d is autumn\n",month);		/*9,10,11月是秋季*/
26 	           	break;
27 	       	/*多路开关模式*/
28 	       	case 12:
29 	       	case 1:    
30 	       	case 2:
31 	           	printf("%d is winter\n",month);		/*12,1,2月是冬季*/
32 	           	break;
33 	       	default:
34 	           	printf("error!!!\n");        			/*无此月份*/
35 	       }
36 	       return 0;                        				/*程序结束*/
37 	}

运行程序,显示结果如图6.21所示。 图6.21 季节运行图

从该实例代码和运行结果可以看出: 程序中使用多路开关模式,使得检测month的值为3、4、5这3种情况时,都会执行相同的操作,并且利用default语句将不符合的数字显示,提示信息表示输入错误。

练一练: 已知一个灯泡并联3个开关,分别为开关1,开关2,开关3,;另一串彩灯串联一个开关4,开关5和开关6并联一个白炽灯和节能灯,问随意按下开关哪个灯能亮?