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

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

Susan Sarandon
發布: 2024-10-24 02:07:02
原創
1011 人瀏覽過

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

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板