(四)语句形式 -- 5 switch语句

5. switch语句

当程序需要更复杂的判断结构时,如有两个以上的可选项,这些选项被划分为一系列互相排斥的情况。最适合这种情况的就是switch语句。

switch语句的起始行为:

switch (e)

其中, e e e 是一个表达式,称为控制表达式(control expression)。


switch语句的主体分成许多独立的由关键词case或default引入的语句组。
一个case关键词和紧随其后直到下一个case或default之前的所有语句合称为case子句。
default关键词及其相应语句合称为default子句。


当程序执行到switch语句时,首先计算控制表达式 e e e 的值,然后依次与 c 1 c_1 c1 c 2 c_2 c2等进行匹配。
这里 c 1 c_1 c1 c 2 c_2 c2等必须是整型常量(或行为类似于整型值的任何值,如字符型)。

如果其中一个常量与控制表达式的值匹配成功,则执行相应case子句中的语句。
当程序到达子句结尾的break语句时,该子句指定的操作已经结束,程序将从整个switch结构后的语句继续执行。
如果没有一个case常量与控制表达式的值匹配,那么将执行default子句的语句。


在switch的语法中,故意将break语句当作switch语法的一部分。


在switch语句中,default子句是可有可无的。
假如没有default子句,当任何case子句都未匹配成功时,程序不做任何动作,继续执行switch结构之后的语句。
为了避免程序忽略一些意外情况,在每个switch语句中都使用default子句是一种良好的程序设计习惯,除非确定已经在case语句中列举了所有的可能情况。


由于switch语句通常可能会很长,如果case子句本身较短,那么程序比较容易阅读。
如果有足够的空间,将case关键字、子句的语句和break语句放在同一行会更好。



代码示例

#include <stdio.h>

/* Print card rank. */

main() {
    
    

    int n;
    printf("What's the rank of the card(1-13)? ");
    scanf("%d", &n);
    switch (n) {
    
    
        case 1: printf("Ace\n"); break;
        case 11: printf("Jack\n"); break;
        case 12: printf("Queen\n"); break;
        case 13: printf("King\n"); break;
        default: printf("%d\n", n); break;
        };
}


参考
《C语言的科学和艺术》 —— 第4章 语句形式

猜你喜欢

转载自blog.csdn.net/m0_38111466/article/details/108903291
今日推荐