3 回答

TA貢獻1786條經驗 獲得超13個贊
來自文檔:“ReadString 讀取直到輸入中第一次出現 delim,返回一個包含數據的字符串,直到并包括分隔符?!?/p>
因此,我建議您使用掃描儀,它可以像您期望的那樣處理這種情況:
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lineStr := scanner.Text()
num, _ := strconv.Atoi(lineStr)
fmt.Println(lineStr, num)
}

TA貢獻1812條經驗 獲得超5個贊
引用bufio.Reader.ReadString的文檔(強調我的):
ReadString 讀取直到輸入中第一次出現 delim ,返回一個包含數據的字符串,直到并包括 delimiter。
現在,strconv.ParseInt的文檔
ParseInt 返回的錯誤具有具體類型 *NumError 并包括 err.Num = s。如果 s 為空或包含無效數字,則 err.Err = ErrSyntax 返回值為 0
您的問題是該ReadString方法還返回\n終止該行的 ,這是該ParseInt函數的無效字符。
您可以使用以下代碼段檢查真正的錯誤
i, err := strconv.ParseInt(line, 10, 64)
if err != nil {
switch err.(*strconv.NumError).Err {
case strconv.ErrSyntax:
fmt.Println("syntax error")
case strconv.ErrRange:
fmt.Println("out of range value")
}
}
建議:用于strings.TrimSpace清理您的輸入。

TA貢獻1804條經驗 獲得超2個贊
如果您查看文檔,ReadString
您會注意到string
返回的將包含分隔符(在您的情況下\n
)。
ReadString 讀取直到輸入中第一次出現 delim 為止,返回一個包含數據的字符串,直到并包括分隔符。
并且因為讀取 10 后的行長度為 4,所以我假設這些行由\r\n
. 刪除它的最簡單方法是使用其中一個Trim
函數(如TrimSpace)。
- 3 回答
- 0 關注
- 354 瀏覽
添加回答
舉報