1.c语言的 switch 语句的功能
1.先计算 switch 后面的值
2.把值和 case 后面的常量表达式挨个比较,若满足则执行后面的语句以及后面 case 的语句
【直到遇见break或者运行完default的语句】
注:如果没有哪个 case 表达式满足,则执行default内容,没有default就不做任何操作
#include <stdio.h>
int main()
{
switch (1)
{
case 1:
printf("1\n");
case 2:
printf("2\n");
default :
printf("w\n");
}
return 0;
}
//1
//2
//w
2.golang的 switch 语句的功能
go里面每个 case 里面默认带有break【暂时提问:这个默认的break能跳出外层for循环吗???】
1.先计算 switch 后面的值
2.把值和 case 后面的常量表达式挨个比较,若满足则执行这个 case 后面的语句
注:如果没有哪个 case 表达式满足,则执行default内容,没有default就不做任何操作
func text() {
x := 8
switch x {
case 1:
fmt.Println("Thumb")
case 2:
fmt.Println("Index")
case 3:
fmt.Println("Middle")
case 4:
fmt.Println("Ring")
default:
fmt.Println("哈哈哈")
}
}
//哈哈哈
3.golang的 for 内嵌 switch-break语句
结果证明默认break只能跳出switch
结果证明手写的break只不过相当于将默认break显式写了出来
func text2() {
for i := 1; i <= 4; i++ {
switch i {
case 1:
fmt.Println("1")
//如果默认的break能跳出for循环,那么就只会打印1
case 2:
fmt.Println("2")
case 3:
break
//如果手写的break能跳出for循环,那么就不会进入i=4的循环
case 4:
fmt.Println("4")
}
}
}
//1
//2
//4
3.1既然手写break已经不能跳出for循环,那怎么才能跳出呢?
golang中的解决方案是使用
break loop,这是 golang 特有的
另外还有一个 goto 的方式,只是不推荐使用
func text3() {
loop:
for i := 1; i <= 3; i++ {
switch i {
case 1:
fmt.Printf("1")
case 2:
break loop
case 3:
fmt.Printf("3")
}
fmt.Println("A")
}
fmt.Println("跳出 for 循环")
}
//1A
//跳出 for 循环
4.golang的 for 内嵌 switch-continue语句
continue对for循环的效果还是跳过当前循环
func text2() {
for i := 1; i <= 3; i++ {
switch i {
case 1:
fmt.Printf("1")
case 2:
continue
//要是continue对for还有效,那么就不会打印A
case 3:
fmt.Printf("3")
}
fmt.Println("A")
}
}
//1A
//3A