go语言基础语法02天-4

8.1.5 switch结构

下面我们开始讲解选择中的另外一个结构就是switch结构。

在讲解switch结构之前,我们先来看如下问题:

李四的年终工作评定,如果定为A级,则工资涨500元,如果定为B级,则工资涨200元,如果定为C级,工资不变,如果定为D级工资降200元,如果定为E级工资降500元.

设李四的原工资为5000,请用户输入李四的评级,然后显示李四来年的工资.

大家看到如上题目,肯定想到的是用if-else if结构来实现,那么具体案例实现如下:

package main

import "fmt"

func main()  {
	var salary int = 5000
	var level string
	fmt.Println("请输入李四的年终评定")
	fmt.Scanf("%s",&level)
	if level == "A"{
		salary += 500 //salary=salary+500
	} else if level == "B" {
		salary += 200
	} else if level == "C"{

	} else if level == "D"{
		salary -= 200
	} else if level == "E"{
		salary -= 500
	}else {
		fmt.Println("输入错误,程序推迟!!")
	}
	fmt.Println("李四来年的工资是:",salary)

}

虽然以上代码实现了我们的需求,但是我们发现了一个问题,如果输入其它字符(例如:输入字符T),我们发现最终的结果不仅输出了“输入错误,程序退出”,同时还输出了“李四来年的工资是:5000”。如果输入错误了,这句话是不应该输出的,那么应该怎样进行处理呢?

package main

import "fmt"

func main()  {
	var salary int = 5000
	var level string
	var b bool
	fmt.Println("请输入李四的年终评定")
	fmt.Scanf("%s",&level)
	if level == "A"{
		salary += 500 //salary=salary+500
	} else if level == "B" {
		salary += 200
	} else if level == "C"{

	} else if level == "D"{
		salary -= 200
	} else if level == "E"{
		salary -= 500
	}else {
		b = false //如果输入错误,将该变量的值修改为false
		fmt.Println("输入错误,程序推迟!!")
	}
	if b {
		fmt.Println("李四来年的工资是:", salary)  //如果成立,且输入正确的级别,输出正确
	}
}

通过上面的代码,我们实际上是定义了一个bool类型的变量,默认值为true,当输入评定级别错误时,将其改为false.最后在输出工资时,做了判断,如果条件成立表示输入了正确的评定级别,所以输出对应的工资,否则不输出工资。(这种技巧,需要大家好好体会一下)

我们前面在讲解if-else if结构时讲过,该结构适合什么场合:1.多条件判断,2:区间性的数据判断。但是我们看一下该案例,是否是对区间性的数据进行判断呢?不是,而是定值判断,也就是对一个固定值的判断。 对这种固定值的判断推荐使用switch-case结构。

8.1.5.1 switch-case结构语法如下:

switch 变量或者表达式的值{
	case 值1:
		要执行的代码
	case 值2:
		要执行的代码
	case 值3:
		要执行的代码
	………………………………..
	default:
		要执行的代码
}

switch-case结构的执行流程:

程序执行到switch处,首先将变量或者表达式的值计算出来,然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行该case所带的代码,执行完成后,跳出switch-case结构。如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在default,如果有default,则执行default中的语句,如果没有default,则该switch-case结构什么都不做

基本案例演示如下:

package main

import "fmt"

func main()  {
	var score int = 90
	switch score {
	case 90:
		fmt.Println("优秀")
	case 80:
		fmt.Println("良好")
	case 70:
		fmt.Println("一般")
	case 60:
		fmt.Println("及格")
	default:
		fmt.Println("不及格")
		}
}

GO语言中switch-case结构中,case后面默认自带break(终止程序执行),这是与其它语言不同的地方。 另外一种语法格式如下:

package main

import "fmt"

func main()  {
	switch score := 70;score {
	case 90:
		fmt.Println("优秀")
	case 80:
		fmt.Println("良好")
	case 70:
		fmt.Println("一般")
	case 60:
		fmt.Println("及格")
	default:
		fmt.Println("不及格")
		}
}

注意:某个case 后面跟着的代码执行完毕后,不会再执行后面的case,而是跳出整个switch结构, 相当于每个case后面都跟着break(终止),但是如果我们想执行完成某个case后,强制执行后面的case,可以使用fallthrough。

下面我们用switch-case结构来实现上面的案例,示例如下:

package main

import "fmt"

func main()  {
	var salary int = 5000
	var level string
	var b bool = true
	fmt.Println("请输入李四的年终评定:")
	fmt.Scanf("%s",&level)
	switch level {
	case "A":
		salary += 500
	case "B":
		salary += 200
	case "C":

	case "D":
		salary -= 200
	case "E":
		salary -= 500
	default:
		b = false
	    fmt.Println("输入错误,退出程序!!!")
	}
	if b {
		fmt.Println("李四来年的工资为",salary)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值