在Go語言中,可以使用scan
方法從標準輸入讀取資料。 scan
方法可以讀取任意類型的數據,包括字串、數字、布林值等等。本文將詳細介紹如何使用scan
方法實現控制台輸入。
scan
方法的基本語法如下:
func Scan(a ...interface{}) (n int, err error)
從輸入中讀取數據,並將其儲存到指定的參數中。參數a
表示需要讀取的數據,可以傳遞任一參數,每個參數都是指標類型,用於儲存輸入的資料。傳回值n
表示成功讀取的參數個數,傳回值err
表示可能出現的錯誤。
下面是一個簡單的例子,示範如何從控制台中讀取兩個整數:
func main() { var a, b int fmt.Print("请输入两个整数:") n, err := fmt.Scan(&a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b}) }
透過上面的程式碼,我們可以看到Scan
方法的基本用法。執行上面的程式碼,程式將提示使用者輸入兩個整數,使用者輸入完成後,程式會將這兩個整數儲存到變數a
和b
中,並輸出這兩個整數。
Scan
方法有以下幾個特性:
##Scan方法在讀取資料時,會自動忽略掉資料之間的空格。如下面的程式碼所示:
func main() { var a, b, c string fmt.Print("请输入三个字符串:") n, err := fmt.Scan(&a, &b, &c) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c}) }輸入字串
hello world go,程式將自動忽略掉字串之間的空格,並輸出這三個字串。
Scan方法在讀取資料時,會等待使用者輸入回車符號
\n,表示輸入完成。如果使用者沒有輸入回車符,程式將一直等待使用者輸入。如下面的程式碼所示:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }輸入字串
hello後,程式並不會立即輸出結果,而是等待使用者輸入回車符號
\n ,才會輸出結果。
Scan方法在讀取資料時,不會讀取輸入中的換行符號
\n。例如,當我們透過
Scan方法讀取一個字串時,輸入字串中的換行符號
\n不會被讀取。如下面的程式碼所示:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }輸入字串
hello\nworld,程式只會讀取到字串
hello,不會讀取到字串中的換行符號
\n。
Scan方法的實作是基於
fmt套件的
Scanf函數。
Scanf方法有以下功能:
Scanf方法支援格式化輸入。可以透過格式化字串指定需要讀取的資料類型。例如,我們可以透過以下格式化字串讀取一個整數和一個字串:
func main() { var a int var b string fmt.Print("请输入一个整数和一个字符串:") n, err := fmt.Scanf("%d %s", &a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b}) }上面的程式碼中,定義的格式化字串
"%d %s"表示先讀取一個整數,再讀取一個字串,中間用空格分隔。
Scanf方法支援自訂分隔符號。預設情況下,
Scanf方法以空格作為分隔符號。可以透過
Scanf方法的
ScanState參數,自訂分隔符號。如下面的程式碼所示:
func main() { var a, b string fmt.Print("请输入两个字符串,用逗号分隔:") s := bufio.NewScanner(os.Stdin) s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) { for i := 0; i < len(data); i++ { if data[i] == ',' { return i + 1, data[:i], nil } } return 0, data, bufio.ErrFinalToken }) if s.Scan() { a = s.Text() } if s.Scan() { b = s.Text() } fmt.Printf("您输入的字符串是:%v\n", []string{a, b}) }上面的程式碼中,我們透過
bufio套件的
NewScanner方法建立一個
Scanner對象,並透過
Split方法自訂了分隔符號。在分隔函數中,我們將逗號作為分隔符,以解析輸入字串,並將其儲存到變數
a和
b。
Scan方法的基本語法、特性以及如何實現控制台輸入。需要注意的是,
Scan方法在處理輸入時,不會將換行符號
\n讀取到輸入中。另外,
Scanf方法支援自訂分隔符號和格式化輸入,可以更靈活地處理控制台輸入。
以上是如何使用scan方法實現控制台輸入的詳細內容。更多資訊請關注PHP中文網其他相關文章!