擷取使用者終端輸入
介紹
在程式設計中 需要接收使用者輸入的資料 就可以使用輸入語句來擷取
步驟
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語句,以免造成程式流程的混亂,使理
解和調試程式都産生困難