关于switch
来源:2-4 条件语句

慕粉4417634
2021-09-02
func grade(score int) string {
g := ""
switch {
case score < 60:
g = "F"
case score < 80:
g = "c"
case score < 90:
g = "B"
case score <= 100:
g = "A"
case score < 0 || score > 100:
panic(fmt.Sprintf(“Wrong score : %d”, score))
}
return g
}
func main() {
fmt.Println(
grade(33),
grade(0),
grade(66),
grade(88),
grade(1001),
)
}
老师为什么不是按照顺序执行的呢?grade(1001)在最后面为什么前面不是panic的比如说grade(0),grade(33)这些都没有输出结果呢,结果只有panic
还有一个问题老师,最后fmt.println(grade(0),…)这个是固定格式吗,在调用函数的最末尾都要有一个逗号?
1回答
-
ccmouse
2021-09-11
这两个问题很好。
grade(1001)的确会panic。为什么只有panic呢,因为这个fmt.Println函数有5个参数,它会先分别调用5个grade函数,把grade全计算出来,然后再调用fmt.Println来输出。那么其中一个grade panic了,它就不会继续往下走。导致一个都没有输出。要解决这个问题,我们可以写5句fmt.Println,每个print输出一个grade即可。
最后的逗号是编译器强制的,就是为了视觉上的美观。
如果是一行内,末尾不需要逗号:fmt.Println(grade(33),grade(0))
如果多行,就必须要有逗号或者直接)结束:
fmt.Println(
grade(33),
grade(0),
)
或
fmt.Println(
grade(33),
grade(0))
不过这些逗号的规则不需要太多记忆,编译器会强制报错,它报错了我们根据它的要求修改即可。
00
相似问题