fmt.Scanln Expectation
在Go中使用fmt.Scanln時,可能會遇到錯誤:「fmt.Scanln預期換行符。
fmt.Scan 與 fmt.Scanln 的行為
fmt.Scan 讀取空格分隔的值來自標準輸入,將換行符視為空格字元。這意味著它將繼續解析輸入,直到所有參數都已填充或發生錯誤。另一方面,fmt.Scanln 也從標準輸入讀取,但需要換行符號作為終止點。之後的任何輸入都不會被解析。
範例
在提供的 Go 程式碼中,使用 fmt.Scanln 讀取字串 s 時會出現問題。輸入包含換行符,該字元會觸發 fmt.Scanln 輸入結束。然而,後續輸入字元「每個人都喜歡冰淇淋」仍然存在,並被後續的 fmt.Scan 消耗。這會導致錯誤,因為 fmt.Scan 期望在輸入末端有一個換行符號。
替代方案
讀取包含空格並以換行符結尾的一行文本,考慮使用bufio.Reader 的ReadString 方法:
<code class="go">import "bufio" func main() { reader := bufio.NewReader(os.Stdin) line, err := reader.ReadString('\n') }</code>
結論
理解fmt.Scan 和fmt.Scanln 的不同行為對於防止錯誤和寫入非常重要符合預期的程式碼。當讀取一行文字時,bufio.Reader 和 ReadString 等替代方案提供了更明確、更有效率的解決方案。
以上是是什麼原因導致「fmt.Scanln Expected Newline」錯誤以及如何解決它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!