GoLang 如何獲取用戶輸入

fmt.Scanln() 與 fmt.Scanf()

需求場景:數就非常有用。比如,創建一個任務管理工具,可能需要用戶輸入任務名稱、截止日期等信息,這時就可以使用 fmt.Scanln ()fmt.Scanf () 來接收用戶輸入。

對於一些需要用戶交互的小型應用程序,比如簡單的計算器程序,可能需要用戶輸入數字和運算符,fmt.Scanf () 可以按照指定的格式接收這些輸入,確保輸入的準確性

fmt.Scanln() 包的使用

fmt.Scanln()函數是 Go 語言中用於接收用戶輸入的函數之一。使用時,首先需要聲明變量來存儲用戶輸入的數據

然後,通過fmt.Println()函數提醒用戶輸入相應的內容,當程序執行到fmt.Scanln(&name)時,程序會停止在這裏,等待用戶輸入,並在用戶回車後繼續執行。對於不同類型的數據,都需要分別調用fmt.Scanln()來接收用戶輸入。代碼案例:

package main

import "fmt"

func main() {
 // 定義用戶輸入數據的變量
 var name string
 var age int
 var salary float64
 var isOffer bool

 // 提醒用戶輸入姓名
 fmt.Println("嘿,朋友!先告訴我你的大名吧:")
 fmt.Scanln(&name)

 // 提醒用戶輸入年齡
 fmt.Println("哇," + name + ",你今年高壽啊?")
 fmt.Scanln(&age)

 // 提醒用戶輸入薪水
 fmt.Println("聽說你月薪過萬了?來,告訴我你的真實收入吧:")
 fmt.Scanln(&salary)

 // 提醒用戶輸入是否拿到 offer
 fmt.Println("最後一個問題,你最近有沒有收到什麼神祕的 offer?(輸入 true 或 false)")
 fmt.Scanln(&isOffer)

 // 輸出用戶所有的信息
 fmt.Println("好啦,總結一下:")
 fmt.Println("名字是", name, ",年齡是", age, "歲,薪水是", salary, "元,是否拿到 offer 是", isOffer)
 fmt.Println("哇塞," + name + ",你真是個傳奇人物!")
}

fmt.Scanf() 包的使用

fmt.Scanf()函數可以按指定的格式輸入輸入值,使用空格隔開。其語法格式爲fmt.Scanf(format string, a...interface{}),其中format是指定的格式字符串,後面的可變參數是接收輸入值的變量地址。這個函數會根據指定的格式去讀取由空白符分隔的值,並保存到傳遞給本函數的參數中。例如,如果要接收一個字符串和一個整數,可以使用fmt.Scanf("%s %d", &str, &num)這樣的格式。需要注意的是如果 %d 後面不加 \ n,則會出現異常來個實際案例:

package main

import "fmt"

func main() {
 // 定義用戶輸入數據的變量
 var name string
 var age int
 var salary float64
 var isOffer bool

 // 提醒用戶輸入姓名
 fmt.Println("嘿,朋友!先告訴我你的大名吧:")
 fmt.Scanf("%s\n"&name)

 // 提醒用戶輸入年齡
 fmt.Println("哇," + name + ",你今年高壽啊?")
 fmt.Scanf("%d\n"&age)

 // 提醒用戶輸入薪水
 fmt.Println("聽說你月薪過萬了?來,告訴我你的真實收入吧:")
 fmt.Scanf("%f\n"&salary)

 // 提醒用戶輸入是否拿到 offer
 fmt.Println("最後一個問題,你最近有沒有收到什麼神祕的 offer?(輸入 true 或 false)")
 fmt.Scanf("%t\n"&isOffer)

 // 輸出用戶所有的信息
 fmt.Println("好啦,總結一下:")
 fmt.Println("名字是", name, ",年齡是", age, "歲,薪水是", salary, "元,是否拿到 offer 是", isOffer)
 fmt.Println("哇塞," + name + ",你真是個傳奇人物!")

 // 突出 fmt.Scanf 的特點:一行輸入多個參數
 fmt.Println("現在我們來玩個高級的,一次輸入多個信息!")
 fmt.Println("請輸入你的姓名、年齡、薪水和是否拿到 offer(用空格分隔):")
 fmt.Scanf("%s %d %f %t\n"&name, &age, &salary, &isOffer)

 // 再次輸出用戶的所有信息
 fmt.Println("再次總結一下:")
 fmt.Println("名字是", name, ",年齡是", age, "歲,薪水是", salary, "元,是否拿到 offer 是", isOffer)
 fmt.Println("你真是太棒了," + name + ",簡直是個天才!")
}

感興趣的用這兩個代碼區執行一下看看區別!

特點比對:

fmt.Scanln()的主要特點是在遇到換行時停止掃描。與fmt.Scanf()相比,fmt.Scanln()是逐行接收用戶輸入,用戶需要逐行輸入不同類型的數據,並且在輸入完一行數據後回車,程序纔會繼續接收下一行數據。而fmt.Scanf()可以通過指定格式一次性接收多個不同類型的數據。與fmt.Scan()相比,fmt.Scanln()在遇到換行時會立刻停止掃描,而fmt.Scan()在遇到換行時可能會繼續等待更多的輸入,直到滿足輸入的數量要求。總的來說,fmt.Scanln()在需要用戶逐行輸入數據的場景下非常有用,它可以確保輸入的準確性和完整性。

  1. fmt.Scanln()是逐行輸入,用戶在輸入完每一行數據後回車,程序纔會繼續接收下一行數據。例如,在接收用戶的姓名、年齡、薪水和是否拿到 offer 的信息時,需要分別在不同的行輸入每個數據項。

  2. fmt.Scanf()則是按照指定的格式一次性輸入多個不同類型的數據,數據之間用空格隔開,最後以回車鍵結束輸入。比如在接收相同的信息時,可以在一行中按照指定格式輸入所有數據。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/KRJt6SoJSW1RyTuEbimMpw