一、switch分支
switchI语句用于基于不同条件执行不同动作,每- 一个case分支都是唯- -的, 从上到下逐一测试,直到匹配为止。匹配项后面也不需要再加break
基本语法:
switch 表达式 {
case表达式1,表达式2, ...
语句块1
case表达式3,表达式4, .. :
default:
语句块
}
二、流程图
三、入门练习
请编写一个程序,该程序可以接收一个字符,比如:a,b.c,d,ef.g a表示星期一 ,b表示星期二根据用户的输入显示相依的信息,要求使用switch 语句完成
//switch的使用
package main
import (
"fmt"
)
func main(){
//定义一个变量,用于接收用户输入
var key byte
fmt.Println("请输入一个字符")
fmt.Scanf("%c",&key)
//使用switch进行判断
switch key {
case 'a':
fmt.Println("星期一")
case 'b':
fmt.Println("星期二")
case 'c':
fmt.Println("星期三")
case 'd':
fmt.Println("星期四")
case 'e':
fmt.Println("星期五")
case 'f':
fmt.Println("星期六")
case 'g':
fmt.Println("星期日")
default:
fmt.Println("请正确输入")
}
}
四、注意细节
1、case后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
//switch的使用
package main
import (
"fmt"
)
//定义一个函数
func test(b byte) byte {
return b + 1
}
func main(){
//定义一个变量,用于接收用户输入
var key byte
fmt.Println("请输入一个字符")
fmt.Scanf("%c",&key)
//使用switch进行判断
switch key { //变量
case 'a':
fmt.Println("星期一")
case test(key): //函数
fmt.Println("星期二")
case test(key) + 1: //函数运算
fmt.Println("星期三")
case 'd':
fmt.Println("星期四")
case 'e':
fmt.Println("星期五")
case 'f':
fmt.Println("星期六")
case 'g':
fmt.Println("星期日")
default:
fmt.Println("请正确输入")
}
}}
2、case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致
//switch的使用
package main
import (
"fmt"
)
func main(){
var a1 int = 10
var a2 int8 = 10
switch a1 { //错误,数据类型不一致
case a2 :
fmt.Println("匹配成功")
default:
fmt.Println("匹配失败")
}
}
3、case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2...
//switch的使用
package main
import (
"fmt"
)
func test(k int) int {
return k
}
func main(){
var a1 int = 20
var a2 int = 10
switch a1 {
case a2 , 15, test(20):
fmt.Println("匹配成功")
default:
fmt.Println("匹配失败")
}
}
4、case后面的表达式如果是常量值(字面量),则要求不能重复
//switch的使用
package main
import (
"fmt"
)
func test(k int) int {
return k
}
func main(){
var a1 int = 20
var a2 int = 10
switch a1 {
case a2 , 15, test(20):
fmt.Println("匹配成功")
case 15: //错误,常量重复,但是用变量不会
fmt.Println("匹配通过")
default:
fmt.Println("匹配失败")
}
}
5、case后面不需要带break ,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果-一个都匹配不到,则执行default【参考代码入门练习】
6、default语句不是必须的
//switch的使用
package main
import (
"fmt"
)
func test(k int) int {
return k
}
func main(){
var a1 int = 20
var a2 int = 10
switch a1 {
case a2 , 15, test(30):
fmt.Println("匹配成功")
case 25 :
fmt.Println("成功")
}
}
7、switch后也可以不带表达式,类似if-else分支来使用。
//switch的使用
package main
import (
"fmt"
)
func test(k int) int {
return k
}
func main(){
//对值判断
var a1 int = 20
switch {
case a1 == 20:
fmt.Println("匹配成功")
default:
fmt.Println("匹配失败")
}
//对范围进行判断
var a2 int = 25
switch {
case a2 >= 30 && a2 < 40:
fmt.Println("ok1")
case a2 > 20 && a2 < test(40):
fmt.Println("ok2")
default:
fmt.Println("没有匹配")
}
}
8、switch后也可以直接声明/定义一个变量,分号结束,不推荐。
//switch的使用
package main
import (
"fmt"
)
func main(){
//对值断
switch a1 := 20;{ //一定要带分号
case a1 == 20:
fmt.Println("匹配成功")
default:
fmt.Println("匹配失败")
}
}
9、switch穿透fllthrough,如果在case语哥块后增加allthrough ,则会继续执行下一个case,也叫switch穿透。
//switch的使用
package main
import (
"fmt"
)
func main(){
//定义一个变量,用于接收用户输入
var key byte
fmt.Println("请输入一个字符")
fmt.Scanf("%c",&key)
//使用switch进行判断
switch key {
case 'a':
fmt.Println("星期一")
fallthrough //默认只穿透一层
case 'b':
fmt.Println("星期二")
case 'c':
fmt.Println("星期三")
case 'd':
fmt.Println("星期四")
case 'e':
fmt.Println("星期五")
case 'f':
fmt.Println("星期六")
case 'g':
fmt.Println("星期日")
default:
fmt.Println("请正确输入")
}
}
10、Type Switch: switch 语句还可以被用于type switch来判断某个interface 变量中实际指向的变量类型
package main
import (
"fmt"
)
func main(){
var x interface{}
var y = 12.0
x = y
switch i := x.(type) {
case nil:
fmt.Println("x 的类型~ :%T",i)
case int:
fmt.Println("x 是 int类型")
case float64:
fmt.Println("x 是 float64")
case func(int) float64:
fmt.Println("x 是 func(int) 型")
case bool, string:
fmt.Println("x 是 bool 或者 string 型")
default:
fmt.Println("没有对应的类型")
}
}
五、练习一
使用switch把小写类型的char型转为大写(键盘输入)。只转换a, b,c, d,e.其它的输出“other"
//switch的使用
package main
import (
"fmt"
)
func main(){
//定义个变量
var a1 byte
//在键盘输入
fmt.Println("请任意输入一个字母")
fmt.Scanf("%c",&a1)
//使用switch判断
switch {
case a1 >='a' && a1 <= 'e':
fmt.Printf("%c",a1 - 32) //使用ascii码得到大写字母
default:
fmt.Println("other")
}
}
练习二
对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。(注:输入的成绩不能大于100)
//switch的使用
package main
import (
"fmt"
)
func main(){
var a1 float64
fmt.Println("请输入学生成绩")
fmt.Scanln(&a1)
switch {
case a1 <= 100 && int(a1 / 60) == 1 :
fmt.Println("合格")
case a1 >= 0 && int(a1 / 60) == 0 :
fmt.Println("不合格")
default:
fmt.Println("请输入正确的成绩")
}
}
练习三
根据用户指定月份,打印该月份所属的季节。3,4,5 春季,6,7,8夏季,9,10,11秋季,12, 1,2冬季
//switch的使用
package main
import (
"fmt"
)
func main(){
var a1 int8
fmt.Println("请输入当前月份")
fmt.Scanln(&a1)
switch a1{
case 3, 4 , 5 :
fmt.Println("春季")
case 6, 7, 8 :
fmt.Println("夏季")
case 9, 10, 11 :
fmt.Println("秋季")
case 12, 1, 2 :
fmt.Println("冬季")
default:
fmt.Println("请输入正确的月份")
}
}
练习四
根据用户输入显示对应的星期时间(tring),如果“星期一”,显示“干煸豆角”如果“星期二”,显示“醋溜土豆”如果“星期三”,显示“红烧狮子头”如果“星期四,显示“油炸花生米”如果“星期五”,显示“蒜蓉扇贝”如果“星期六”,显示“东北乱炖”如果“星期日”,显示“大盘鸡”。
//switch的使用
package main
import (
"fmt"
)
func main(){
var key string
fmt.Println("请输入星期几")
fmt.Scanf("%s",&key)
switch key {
case "星期一" :
fmt.Println("干煸豆角")
case "星期二" :
fmt.Println("醋溜土豆")
case "星期三" :
fmt.Println("红烧狮子头")
case "星期四" :
fmt.Println("油炸花生米")
case "星期五" :
fmt.Println("蒜蓉扇贝")
case "星期六" :
fmt.Println("东北乱炖")
case "星期日" :
fmt.Println("大盘鸡")
default:
fmt.Println("请正确输入")
}
}