(3-1-02)流程控制语句:条件语句(2)

3.1.4  使用if 嵌套语句

在Go程序中,可以在 if 或 else if 语句中嵌入使用一个或多个 if 或 else if 语句。具体语法格式如下:

if 布尔表达式 1 {
   //在布尔表达式 1 为 true 时执行
   if 布尔表达式 2 {
      //在布尔表达式 2 为 true 时执行
   }
}

实例3-4智能密码锁系统(源码路径:Go-codes\3\pass.go)

小区内某业主新安装了智能防盗门,提供了一套智能密码锁系统保护家庭安全。假设业主设置的正确密码是“88888888”,请编写程序模拟智能密码系统的运作流程。实例文件pass.go的具体实现代码如下所示。

package main
import"fmt"
func main(){
	var a int
	var b int
	fmt.Printf("请输入密码:\n")					//提示业主输入密码
	fmt.Scan(&a) 								//获取业主输入的密码
	if a == 88888888 {							//如果业主第一次输入的密码是“88888888”
		fmt.Printf("请再次输入密码:")				//提示业主再次输入密码
		fmt.Scan(&b)
		if b == 88888888 {						//如果业主第二次输入的密码是“88888888”
			fmt.Printf("密码正确,门锁已打开")	//打印输出密码正确的提示
		}else{								//如果业主第二次输入的密码不是“88888888”
			fmt.Printf("非法入侵,已自动报警")	//打印输出非法入侵的提示
		}
	}else{									//如果业主第一次输入的密码不是“88888888”
		fmt.Printf("非法入侵,已自动报警")			//打印输出非法入侵的提示
	}
}

执行本实例,在输入正确密码“88888888”后会输出:

请输入密码:

88888888

请再次输入密码:88888888

密码正确,门锁已打开

3.1.5  使用switch 语句

虽然使用if…else if…else语句可以对多种情况进行判断,但是,该类语句在判断某些问题时,必须按顺序编写每个else if语句,书写会比较麻烦。为此,Go语言提供了另外一个语句来更好的实现多分支语句的判别——switch语句。和嵌套if或多个else if 语句相比,switch语句更加直观,并且更加容易理解。

在Go程序中,switch语句能够对某个条件进行多次判断,具体语法格式如下:

switch var1 {
    case 条件1:
        代码块1
    case 条件2:
        代码块2
    default:
        代码块N
}

对上述格式的具体说明如下:

(1)“var1”、“条件1”和“条件2”可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型,或者最终结果为相同类型的表达式。

(2)“var1”可以省略不写。

(3)可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:

case val1, val2, val3

(4)如果满足“条件1”则执行后面对应的“代码块1”, 如果满足“条件2”则执行后面对应的“代码块2”,如果都不满足,则执行default后面的“代码块N”。

switch语句的执行流程如图3-4所示。

图3-4  switch语句的执行流程

实例3-5:成绩评测系统(源码路径:Go-codes\3\dengji.go)

用变量marks表示某同学的考试成绩,请使用switch语句判断这名同学的成绩等级:

  1. marks<60:E,不及格
  2. 60<=marks<70:D,及格
  3. 70<=marks<80:C,良好
  4. 80<=marks<90:B,优秀
  5. 90<=marks<=100:A,完美 

实例文件dengji.go的具体实现代码如下所示。

package main
import "fmt"
func main() {
	var marks int = 70				//变量marks表示某同学的考试成绩,赋值70
	switch {
	case marks>=90 :					//如果成绩大于等于90
		fmt.Printf("A:完美!\n" )
	case  marks>=80 : 				//如果成绩大于等于80
		fmt.Printf("B:优秀\n" )
	case marks>=70 : 				//如果成绩大于等于70
		fmt.Printf("C:良好\n" )
	case  marks>=60 : 				//如果成绩大于等于60
		fmt.Printf("D:及格\n" )
	default: 						//如果不满足上面的成绩范围
		fmt.Printf("E:差,不及格\n" );
	}
}

执行后会输出:

C:良好

在Go程序中,还可以使用switch 语句的type-switch用法,用于判断某个interface变量中实际存储的变量的类型。type-switch用法的语法格式如下:

switch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    //可以定义任意个数的case
    default:					//可选
       statement(s);
}

请看下面的实例文件type.go,能够打印输出变量x的类型。

package main
import "fmt"
func main() {
	var x interface{}
	switch i := x.(type) {
	case nil:
		fmt.Printf(" x 的类型 :%T",i)
	case int:
		fmt.Printf("x 是 int 型")
	case float64:
		fmt.Printf("x 是 float64 型")
	case func(int) float64:
		fmt.Printf("x 是 func(int) 型")
	case bool, string:
		fmt.Printf("x 是 bool 或 string 型" )
	default:
		fmt.Printf("未知型")
	}
}

执行后会输出:

x 的类型 :<nil>

在Go语言中,case 是一个独立的代码块,执行完毕后不会像C语言那样紧接着执行下一个 case,但是为了兼容一些移植代码,依然加入了关键字fallthrough来实现这一功能。请看下面的实例文件chuan.go,演示了使用关键字fallthrough调整case语句的用法。

package main
import "fmt"

func main() {
	switch {
	case false:
		fmt.Println("1、case 条件语句为 false")
		fallthrough
	case true:
		fmt.Println("2、case 条件语句为 true")
		fallthrough
	case false:
		fmt.Println("3、case 条件语句为 false")
		fallthrough
	case true:
		fmt.Println("4、case 条件语句为 true")
	case false:
		fmt.Println("5、case 条件语句为 false")
		fallthrough
	default:
		fmt.Println("6、默认 case")
	}
}

在上述代码中,使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。执行后会输出:

2、case 条件语句为 true
3、case 条件语句为 false
4、case 条件语句为 true

未完待续

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值