Go语言基础三 流程控制

获取用户终端输入

在这里插入图片描述

介绍

在编程中 需要接收用户输入的数据 就可以使用输入语句来获取

步骤

1,导入 fmt 包
2,调用fmt包 的 fmt.Scanln() 或者 fmt.Scanf()

Demo

方式一:

package main

import "fmt"

func main() {
	// 要求 从控制台接收用户信息 (姓名 年龄 薪水 是否通过考试)
	// 方式1 fmt.Scanln
	// 声明变量
	var name string
	var age byte
	var sal float32
	var isPass bool
	fmt.Println("请输入名字")
	fmt.Scanln(&name)
	fmt.Println("请输入年龄")
	fmt.Scanln(&age)
	fmt.Println("请输入薪水")
	fmt.Scanln(&sal)
	fmt.Println("请输入是否通过考试")
	fmt.Scanln(&isPass)
	fmt.Printf("名字是 %v \n 年龄是 %v \n 薪水是 %v \n 是否通过考试 %v \n", name, age, sal, isPass)
}

方式二

package main

import "fmt"

func main() {
	// 要求 从控制台接收用户信息 (姓名 年龄 薪水 是否通过考试)
	// 方式1 fmt.Scanln
	// 声明变量
	var name string
	var age byte
	var sal float32
	var isPass bool
    fmt.Println("请输入你的姓名, 年龄, 薪水, 是否通过考试, 使用空格隔开")
	fmt.Scanf("%s %d %f %t", &name, &age, &sal, &isPass)
	fmt.Printf("名字是 %v \n 年龄是 %v \n 薪水是 %v \n 是否通过考试 %v \n", name, age, sal, isPass)
}

流程控制

单分支控制

if 条件表达式
{
执行代码块
}
说明:当条件表达式为 true时 就会执行{}的代码。注意{}是必须有的就算只写一行代码

package main

import "fmt"

func main() {
	// 编写程序 可以输入年龄 判断该同志的年龄大于18岁 就输入年龄大于18
	var age int
	fmt.Println("请输入年龄")
	fmt.Scanln(&age)
	if age >= 18 {
		fmt.Println("你是成年人")
	} else if age < 18 {
		fmt.Println("你还是孩子")
	}
}

C:\Users\86152\AppData\Local\Temp\GoLand\___go_build_gopl_Demo.exe
请输入年龄
15
你还是孩子


在这里插入图片描述

单分支细节说明

	if age := 20; age > 18 {
		fmt.Println("aaaa")
	}

分支控制 if-else

在这里插入图片描述

var age int
	fmt.Println("请输入年龄")
	fmt.Scanln(&age)
	if age >= 18 {
		fmt.Println("你是成年人")
	} else if age < 18 {
		fmt.Println("你还是孩子")
	}

在这里插入图片描述

switch 基本使用

基本介绍

1,switch 语句用于基于不同条件执行不同的动作 每一个case 分支都是唯一的 从上到下逐一测试 直到匹配为止
2,匹配项后面也不需要在加break

流程图

在这里插入图片描述

1 Switch 的执行的流程是,先执行表达式 得到值 然后和case 的表达式进行比较 如果相等 就匹配到 然后执行对应的 case 的语句块 然后退出 switch 控制
2 如果 switch 的表达式的值没有喝任何的case 的表达式匹配成功 则执行 default 的语句块后退出 switch
3 go 的case 后的表达式可以有多个 ,使用 逗号 间隔
4 go 中的case 语句块不需要写break 因为默认会有 即在默认的情况下当程序执行完case 语句块块 就直接退出 switch

案例

package main

import "fmt"

func main() {
	var key byte
	fmt.Println("请输入 a,b,c,d")
	fmt.Scanf("%c", &key)
	switch key {
	case 'a':
		fmt.Println("我是a")
	
	case 'b':
		fmt.Println("我是b")
	default:
		fmt.Println("输入错误")

	}

}

switch细节讨论

  1. case后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
  2. case后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致
  3. case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2 …
  4. case后面的表达式如果是常量值(字面量),则要求不能重复
  5. case后面不需要带break ,程序匹配到一个case后就会执行对应的代码块,然
    后退出switch,如果一个都匹配不到,则执行default
  6. default语句不是必须的.
    7)switch 后也可以不带表达式 类似 if-else 分支来使用
    8)Switch 后也可以直接声明、定义一个变量 分号结束
    9)switch 穿透 fallthrough 如果在 case 语句块后增加 fallthrough 则会执行下一个case 也叫switch 穿透
    10)Type Switch : switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量的类型

switch 和 if 的比较

1,如果判断的具体数值不多 而且符合整数 浮点数 字符 字符数 字符串这几种类型 建议用 switch 语句
2,其他情况 对区间判断和结果为bool 类型的判断 使用 if if 使用范围更广。

For 的基本介绍应用

快速入门

	for i := 0; i < 10; i++ {
		fmt.Println("我是美女")
	}

基本语法

for 循环变量初始化;循环条件;循环变量迭代 {
循环操作(语句)
}

for 循环执行流程分析

在这里插入图片描述
在这里插入图片描述

for 遍历字符串

	// 传统字符串遍历方式1
	var str string = "hello world!"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c \n", str[i])
	}
	// 用for-range 的方式

	str1 := "fengjiaojiao"
	for i, i2 := range str1 {
		fmt.Printf("i=%d,i2=%c \n", i, i2)
	}

上面代码的细节讨论

如果我们的字符串中含有中文 那么传统的遍历字符串的方式 就是错误 会出现乱码 原因是传统的对字符串的遍历是按照字节来遍历 而一个汉字在 utf-8 编码是对应3个字节

for 练习题


	//打印 1-100 之间所有是 9的倍数的个数,总和
	sum := 0
	count := 0
	for i := 1; i <= 100; i++ {
		if i%9 == 0 {
			sum += i
			count++
		}
	}
	fmt.Println(sum)
	fmt.Println(count)

多重循环控制

介绍:

1)将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for称为外层循环在里面的for循环称为内层循环。【建议一般使用两层,最多不要超过3层】
2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环开始下一次的循环。
3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

跳转控制语句 -break

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	//	编写 一个无限循环的控制 不停的随机生成数 生成99 时  退出 记录第几次找到的
	count := 0

	for {

		rand.Seed(time.Now().UnixNano())
		n := rand.Intn(100) + 1
		count++
		if n == 99 {
			fmt.Println("找到99 啦 退出")

			break
		}
	}
	fmt.Println(count)
}


break 的基本介绍跟基本语法

基本介绍:

break语句用于终止某个语句块的执行,用于中断当前for循环或跳出switch语句。

基本语法:

{
….…
break;
}
以for循环使用break为例,画出示意图
在这里插入图片描述
在这里插入图片描述

跳转控制语句 continue

基本介绍:

  1. continue语句用于结束本次循环,继续执行下一次循环。
  2. continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过
    的是哪一层循环,这个和前面的标签的使用的规则一样.

基本语法:

{…
continue;
……
}
以for使用continue为例,画出示意图
在这里插入图片描述

跳转语句 goto

介绍:

  1. Go语言的goto语句可以无条件地转移到程序中指定的行。
  2. goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。3)在Go程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理
    解和调试程序都产生困难

跳转语句 return

介绍:

return使用在方法或者函数中,表示跳出所在的方法或函数,在讲解函数的时候。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值