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中文網其他相關文章!