switch 语句

262 阅读1分钟

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