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章 语句形式