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()
在需要用戶逐行輸入數據的場景下非常有用,它可以確保輸入的準確性和完整性。
-
fmt.Scanln()
是逐行輸入,用戶在輸入完每一行數據後回車,程序纔會繼續接收下一行數據。例如,在接收用戶的姓名、年齡、薪水和是否拿到 offer 的信息時,需要分別在不同的行輸入每個數據項。 -
fmt.Scanf()
則是按照指定的格式一次性輸入多個不同類型的數據,數據之間用空格隔開,最後以回車鍵結束輸入。比如在接收相同的信息時,可以在一行中按照指定格式輸入所有數據。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/KRJt6SoJSW1RyTuEbimMpw