fmt.Scanln 預期換行符錯誤:了解行為
Go 中的fmt.Scanln 函數在遇到缺少換行符時會引發錯誤讀取一行輸入。與 C 中的 getline 方法不同,此行為是有意為之,並由 fmt.Scanln 的特定實作驅動。
Scan 與 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中文網其他相關文章!