首頁  >  文章  >  後端開發  >  為什麼 Go 的 fmt.Scanln 給出「預期換行符」錯誤?

為什麼 Go 的 fmt.Scanln 給出「預期換行符」錯誤?

DDD
DDD原創
2024-10-24 04:27:31254瀏覽

Why Does Go's fmt.Scanln Give an

fmt.Scanln 錯誤:預期換行

在Go 中使用fmt.Scanln 函數時,可能會遇到「預期換行」錯誤。當輸入在預期分隔符號(通常是空格)之前包含換行符時,就會發生這種情況。為了解決這個問題,讓我們深入研究 fmt.Scan 和 fmt.Scanln 的行為。

fmt.Scan 從標準輸入讀取空格分隔的值,將換行符視為空格。它將這些值指派給相應的參數,傳回成功掃描的項目的計數。

fmt.Scanln 的行為類似,但在換行符號處停止掃描。重要的是,輸入必須以換行或 EOF 結尾才能成功完成。

為了說明這一點,請考慮以下輸入:

123
123.456
everybody loves ice cream

使用fmt.Scan 時,輸出將為:

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody
Error:  Scan: expected newline

fmt.Scan 將「每個人都喜歡冰淇淋」解釋為兩個字串,從而導致錯誤。

但是,如果您使用fmt.Scanln 作為相同的輸入,則輸出將是:

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody loves ice cream

fmt.Scanln 將換行符識別為分隔符,並正確地將整行解析為單一字串參數。

讀取以換行符號結尾的行去吧,你可以使用 bufio.Reader 及其 ReadString 方法:

line, err := buffer.ReadString('\n')

以上是為什麼 Go 的 fmt.Scanln 給出「預期換行符」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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