您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么使用scan方法實現(xiàn)控制臺輸入的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么使用scan方法實現(xiàn)控制臺輸入文章都會有所收獲,下面我們一起來看看吧。
scan
方法的基本語法如下:
func Scan(a ...interface{}) (n int, err error)
從輸入中讀取數(shù)據(jù),并將其存儲到指定的參數(shù)中。參數(shù)a
表示需要讀取的數(shù)據(jù),可以傳遞任意個參數(shù),每個參數(shù)都是一個指針類型,用于存儲輸入的數(shù)據(jù)。返回值n
表示成功讀取的參數(shù)個數(shù),返回值err
表示可能出現(xiàn)的錯誤。
下面是一個簡單的例子,演示如何從控制臺中讀取兩個整數(shù):
func main() { var a, b int fmt.Print("請輸入兩個整數(shù):") n, err := fmt.Scan(&a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功讀取了 %d 個參數(shù):%v\n", n, []int{a, b}) }
通過上面的代碼,我們可以看到Scan
方法的基本用法。執(zhí)行上面的代碼,程序?qū)⑻崾居脩糨斎雰蓚€整數(shù),用戶輸入完成后,程序會將這兩個整數(shù)存儲到變量a
和b
中,并輸出這兩個整數(shù)。
Scan
方法有以下幾個特性:
Scan
方法在讀取數(shù)據(jù)時,會自動忽略掉數(shù)據(jù)之間的空格。如下面的代碼所示:
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 個參數(shù):%v\n", n, []string{a, b, c}) }
輸入字符串hello world go
,程序?qū)⒆詣雍雎缘糇址g的空格,并輸出這三個字符串。
Scan
方法在讀取數(shù)據(jù)時,會等待用戶輸入回車符\n
,表示輸入完成。如果用戶沒有輸入回車符,程序?qū)⒁恢钡却脩糨斎?。如下面的代碼所示:
func main() { var s string fmt.Print("請輸入一個字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功讀取了 %d 個參數(shù):%v\n", n, s) }
輸入字符串hello
后,程序并不會立即輸出結(jié)果,而是等待用戶輸入回車符\n
,才會輸出結(jié)果。
Scan
方法在讀取數(shù)據(jù)時,不會讀取輸入中的換行符\n
。比如,當(dāng)我們通過Scan
方法讀取一個字符串時,輸入字符串中的換行符\n
不會被讀取。如下面的代碼所示:
func main() { var s string fmt.Print("請輸入一個字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功讀取了 %d 個參數(shù):%v\n", n, s) }
輸入字符串hello\nworld
,程序只會讀取到字符串hello
,不會讀取到字符串中的換行符\n
。
Scan
方法的實現(xiàn)是基于fmt
包的Scanf
函數(shù)。Scanf
方法有以下幾個特性:
Scanf
方法支持格式化輸入??梢酝ㄟ^格式化字符串指定需要讀取的數(shù)據(jù)類型。比如,我們可以通過以下格式化字符串讀取一個整數(shù)和一個字符串:
func main() { var a int var b string fmt.Print("請輸入一個整數(shù)和一個字符串:") n, err := fmt.Scanf("%d %s", &a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功讀取了 %d 個參數(shù):%v\n", n, []interface{}{a, b}) }
上面的代碼中,定義的格式化字符串"%d %s"
表示先讀取一個整數(shù),再讀取一個字符串,中間用空格分隔。
Scanf
方法支持自定義分隔符。默認(rèn)情況下,Scanf
方法以空格作為分隔符??梢酝ㄟ^Scanf
方法的ScanState
參數(shù),自定義分隔符。如下面的代碼所示:
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
方法創(chuàng)建一個Scanner
對象,并通過Split
方法自定義了分隔符。在分隔函數(shù)中,我們將逗號作為分隔符,以解析輸入字符串,并將其存儲到變量a
和b
中。
關(guān)于“怎么使用scan方法實現(xiàn)控制臺輸入”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“怎么使用scan方法實現(xiàn)控制臺輸入”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。