首頁  >  文章  >  後端開發  >  是什麼原因導致「fmt.Scanln Expected Newline」錯誤以及如何解決它?

是什麼原因導致「fmt.Scanln Expected Newline」錯誤以及如何解決它?

Susan Sarandon
Susan Sarandon原創
2024-10-24 02:07:02923瀏覽

What Causes

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

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