OC选择结构:2-switch语句
switch 语句
除了if语句之外,Objective-C语言还提供了用于多分支选择的switch语句, 其一般形式为:
switch(表达式){
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
...
case 常量表达式n: 语句n;
default: 语句n+1;
}
其语义是:计算表达式的值, 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。所以为了让程序只执行某个case后面的语句时,我们需要在该case的末尾添加break语句。
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 从键盘输入一个数字,数字1~7代表周一~周日,其余的数字打印Error
int date;
scanf("%d", &date);
switch (date) {
case 1:
NSLog(@"Monday");
break;
case 2:
NSLog(@"Tuesday");
break;
case 3:
NSLog(@"Wednesday");
break;
case 4:
NSLog(@"Thursday");
break;
case 5:
NSLog(@"Friday");
break;
case 6:
NSLog(@"Saturday");
break;
case 7:
NSLog(@"Sunday");
break;
default:
NSLog(@"Error!");
break;
}
}
return 0;
}
运行结果。当我们输入数字1时,打印结果是Monday。
switch中的break语句
假如我们在每个case语句中,不主动添加break语句,那么程序在判断后,会执行后面所有case后的语句。我们把上面的代码进行一些修改,去掉case语句中的break;代码后,再执行一次。
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 从键盘输入一个数字,数字1~7代表周一~周日,其余的数字打印Error
int date;
scanf("%d", &date);
switch (date) {
case 1:
NSLog(@"Monday");
case 2:
NSLog(@"Tuesday");
case 3:
NSLog(@"Wednesday");
case 4:
NSLog(@"Thursday");
case 5:
NSLog(@"Friday");
case 6:
NSLog(@"Saturday");
case 7:
NSLog(@"Sunday");
default:
NSLog(@"Error!");
}
}
return 0;
}
运行后,当我们输入1时,会打印出所有case以及default中执行的代码。因此,在使用switch语句时,每个case语句执行最后,不要忘记添加break。
switch语句的简写方式
在使用switch语句时,有时候会出现很多个case下需要执行的代码都相同,那么可以使用下面的简化形式:
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 从键盘输入一个数字,数字1~7代表周一~周日,其余的数字打印Error
int date;
scanf("%d", &date);
switch (date) {
case 1:
case 2:
case 3:
case 4:
case 5:
NSLog(@"weekday");
break;
case 6:
case 7:
NSLog(@"weekend");
break;
default:
NSLog(@"Error!");
break;
}
}
return 0;
}
上面的代码中case 1~5执行的代码都是一样的,都会打印weekday,case 6~7执行的代码相同,会打印weekend,这样写会比较简洁。
switch语句中定义新变量
如果在switch语句的case中出现定义新变量时,那么case语句冒号后的内容需要加上大括号,否则编译器会报错,其他情况下多行语句可以不适用大括号括起,程序会按顺序执行每一行代码。例如:
int main(int argc, const char * argv[]) {
@autoreleasepool {
int i;
scanf("%d", &i);
switch (i) {
case 1: {
// case中定义新的变量时需要加上大括号
int newNumber = 10;
NSLog(@"newNumber = %d", newNumber);
break;
}
default:
NSLog(@"Error!");
break;
}
}
return 0;
}
示例代码
https://github.com/99ios/2.4.2