获取用户终端输入
介绍
在编程中 需要接收用户输入的数据 就可以使用输入语句来获取
步骤
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细节讨论
- case后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
- case后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致
- case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2 …
- case后面的表达式如果是常量值(字面量),则要求不能重复
- case后面不需要带break ,程序匹配到一个case后就会执行对应的代码块,然
后退出switch,如果一个都匹配不到,则执行default - 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
基本介绍:
- continue语句用于结束本次循环,继续执行下一次循环。
- continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过
的是哪一层循环,这个和前面的标签的使用的规则一样.
基本语法:
{…
continue;
……
}
以for使用continue为例,画出示意图
跳转语句 goto
介绍:
- Go语言的goto语句可以无条件地转移到程序中指定的行。
- goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。3)在Go程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理
解和调试程序都产生困难
跳转语句 return
介绍:
return使用在方法或者函数中,表示跳出所在的方法或函数,在讲解函数的时候。