首頁  >  文章  >  後端開發  >  Scan 與 Go 中的 Scanln:瞭解預期的換行行為

Scan 與 Go 中的 Scanln:瞭解預期的換行行為

Barbara Streisand
Barbara Streisand原創
2024-10-24 02:54:02296瀏覽

Scan vs. Scanln in Go: Understanding the Expected Newline Behavior

fmt.Scanln 預期換行符錯誤:了解行為

Go 中的fmt.Scanln 函數在遇到缺少換行符時會引發錯誤讀取一行輸入。與 C 中的 getline 方法不同,此行為是有意為之,並由 fmt.Scanln 的特定實作驅動。

Scan 與 Scanln

fmt.Scan 讀取輸入空格分隔的值並將它們儲存在指定的參數中。換行符被視為空格字元。相反,fmt.Scanln 在換行符處停止掃描,並且在掃描的最後一項之後必須有換行符。這種差異源自於它們的預期用途:

  • fmt.Scan 用於掃描單行上的多個單獨的空格分隔值。
  • fmt.Scanln 旨在掃描完整的內容輸入行,包括任何空白字元和換行符。

錯誤

當使用 fmt.Scanln 輸入後沒有換行符時,錯誤為觸發是因為該函數需要換行符號來終止該行。錯誤訊息“Scan: Expected newline”表示這種情況。

與 C 中的 getline 比較

C 中的 getline 方法讀取一行輸入並儲存它在提供的字串變數中。與 fmt.Scanln 不同,getline 不需要在輸入末端新增換行符號。這種差異是由於 getline 通常用於讀取整行,而 fmt.Scanln 設計用於掃描行內的特定值。

行讀取的替代方法

如果需要在Go 中讀取完整的一行輸入,可以使用bufio.Reader 類型的ReadString 方法:

<code class="go">line, err := buffer.ReadString('\n')</code>

此方法讀取輸入,直到遇到換行符並儲存line 變數中的行。

透過了解 fmt.Scanln 的行為及其與 C 的 getline 方法的區別,您可以有效地使用這些函數來處理 Go 程式中的輸入解析。

以上是Scan 與 Go 中的 Scanln:瞭解預期的換行行為的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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