首页 > 编程笔记 > C语言笔记 阅读:20

C语言switch语句的用法(非常详细,新手必看)

C语言中的 if else 语句只有两个分支可供选择,而在实际问题中常需要用到多分支选择。就像买衣服,可以有多种选择。当然,使用嵌套的 if 语句也可以采用多分支实现买衣服的选择,但是分支较多,就会使得嵌套的 if 语句层数较多,程序会变得冗余并且可读性不好。

在 C语言中,可以使用 switch 语句直接处理像买衣服这种多分支选择的情况,以提高程序的可读性。

C语言switch语句的基本形式

switch 语句是多分支选择语句,它的一般形式如下:
switch(表达式)
{
    case 情况1:
         语句块1;
    case 情况2:
         语句块2;
    …
    case 情况n:
         语句块n;
    default:
         所有情况都不符合语句块;
}
有以下几点说明:
switch 语句的实现过程如下:
switch 语句的执行流程图如下图所示:

图 1 switch 语句的执行流程图

下面通过图 1 所示的流程图分析 switch 语句的一般形式:
switch 语句检验的必须是整型表达式,这意味着其中可以包含运算符和函数。而 case 语句检验的值必须是整型常量,即可以是常量表达式或者包含常量运算。

下面通过如下代码来分析 switch 语句的使用方法:
switch(selection)
{
    case 1:
       printf("选择矿泉水\n");
       break;
    case 2:
       printf("选择旺仔\n");
       break;
    case 3:
       printf("选择脉动\n");
       break;
    default:
       printf("输入错啦!\n");
       break;
}
上述代码通过 switch 判断 selection 变量的值,利用 case 语句检验 selection 的值的不同情况:
注意,在使用 switch 语句时,如果没有一个 case 语句后面的值能匹配 switch 语句的条件,就执行 default 后面的语句。其中,任意两个 case 语句不能使用相同的常量值;并且每一个 switch 结构只能有一个 default 语句,而且 default 可以省略。

在使用 switch 语句时,每一个 case 中都要使用 break 语句,break 语句可实现执行完 case 语句后跳出 switch 语句。如果没有 break 语句,程序会将后面的内容全都执行。

例如下面的代码,case 语句结束后不加 break:
#include <stdio.h>
int main(){
    int money;
    printf("请查看口袋剩多少元钱\n");
    scanf("%d", &money);                   
    switch (money)                           
    {
    case 7:
        printf("还剩%d元,吃米饭套餐\n", money);     
        //没有break语句
    case 12:
        printf("还剩%d元,吃米线\n", money);           
        //没有break语句  
    case 40:
        printf("还剩%d元,吃比萨\n", money);        
        //没有break语句
    default:
        printf("没钱了!!!\n");  
    }
}
运行结果为:

请查看口袋剩多少元钱
7
还剩7元,吃米饭套餐
还剩7元,吃米线
还剩7元,吃比萨
没钱了!!!

从运行结果可以看出,去掉 break 语句后,程序会将与 case 检验情况相符后的所有语句输出。因此,在这种情况下,break 语句在 case 语句中是不能缺少的。

多路开关模式的switch语句

在前面的实例中,将 break 语句去掉之后,会将符合检验条件后的所有语句都输出。利用这个特点,可以设计多路开关模式的 switch 语句,它的形式如下:
switch(表达式)
{
    case 1:
       语句1
       break;
    case 2:
    case 3:
       语句2
       break;
    …
    default:
       默认语句
       break;
}
从以上形式中可以看到,如果在 case 2 后不使用 break 语句,那么符合 case 2 检验时与符合 case 3 检验时的输出效果是一样的。也就是说,使用多路开关模式,可以使多种检验条件用一个语句块输出。

【实例】平年一年中的 12 个月,1、3、5、7、8、10、12 月是 31 天,4、6、9、11 月是 30 天,2 月是 28 天,如果在控制台上任意输入月份,就可以知道这个月有多少天。具体代码如下:
#include<stdio.h>
int main()
{
    int month;                                    
    printf("请输入月份:\n");
    scanf("%d", &month);
    switch (month)
    {
    //多路开关模式
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
          printf("%d月有31天\n", month);
          break;
    //多路开关模式  
    case 4:
    case 6:
    case 9:
    case 11:
          printf("%d月有30天\n", month);
          break;
    case 2:
          printf("%d月有28天\n", month);
          break;
    default:
          printf("输入错啦,没有这个月份\n");  
    }
    return 0; //程序结束
}
运行结果为:

请输入月份:
3
3月有31天

当参数的值与 case 语句后的值相匹配时,程序开始执行当前 case 语句后的语句序列;当遇到 break 关键字时,程序将跳出 switch 多分支语句。

相关文章