首頁  >  文章  >  後端開發  >  fmt.Scanln 意外換行錯誤:fmt.Scan 和 fmt.Scanln 有什麼不同?

fmt.Scanln 意外換行錯誤:fmt.Scan 和 fmt.Scanln 有什麼不同?

Barbara Streisand
Barbara Streisand原創
2024-10-23 21:27:02483瀏覽

fmt.Scanln Unexpected Newline Error: What's the Distinction Between fmt.Scan and fmt.Scanln?

fmt.Scanln 意外換行錯誤:深入探討Go 的輸入處理

許多Go 開發者在下列情況下都會遇到「fmt .Scanln 預期換行錯誤」與使用者輸入互動。要理解此錯誤,深入研究 fmt.Scan 和 fmt.Scanln 的工作原理至關重要。

fmt.Scan 和空格分隔的輸入
fmt.Scan 讀取空格 -將輸入與標準輸入分開。提供給 fmt.Scan 的每個參數對應於由空格分隔的單字或值。換行符的存在被視為空格,允許多行輸入。以下程式碼為例:

提供輸入“123”,此程式碼將讀取並列印“read 1 integer: 123”。

fmt.Scanln和換行符號分隔輸入
相反,fmt.Scanln 期望換行符號作為分隔符號。讀取所有輸入直到換行符後,它停止解析。 Scanln 文件中明確說明了這一點:

「Scanln 與Scan 類似,但在換行符處停止掃描,並且在最後一項之後必須有換行符或EOF。」

此行為具體表現為以下代碼:

輸入“每個人都喜歡冰淇淋”,​​此代碼將讀取並打印“讀取1 行:每個人都喜歡冰淇淋”。由空格分隔的「everybody」和「loves」的存在不會中斷解析,因為 fmt.Scanln 僅由最後的換行符號分隔。

理解錯誤
中在提供的初始範例中,Scanln 遇到錯誤“預期換行符”,因為輸入字串“每個人都喜歡冰淇淋”不以換行符結尾。要解決此問題,輸入末尾必須存在換行符。

讀取行的替代方法
如果目標是讀取一行輸入,請使用ReadString來自bufio.Reader 套件是fmt.Scanln 的可靠替代品:

以上是fmt.Scanln 意外換行錯誤:fmt.Scan 和 fmt.Scanln 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn