我试图获取输入(许多数字带有空格)并将其转换为切片。数字数量最多为 300,000我得到了一个错误,我用谷歌搜索了它。并且缓冲区大小存在一些问题。所以我写了如下代码。func ChangeToInt(input string) []int { var nums []int for _, word := range strings.Fields(input) { num, _ := strconv.Atoi(word) nums = append(nums, num) } return nums}scanner := bufio.NewScanner(os.Stdin)maxCapacity := 4*300000buf := make([]byte, maxCapacity)scanner.Buffer(buf, maxCapacity)scanner.Scan()input := scanner.Text()nums := ChangeToInt(input) 但仍然不起作用。怎么了?
2 回答

千巷猫影
TA贡献1829条经验 获得超7个赞
您正在使用 bufio。扫描仪
读取您的输入。默认情况下读取行,并使用内部缓冲区来存储行。默认情况下,该行的最大长度可能为 bufio。MaxScanTokenSize
,大小为 64 KB。如果您的行长于此值,您将收到错误。bufio.Scanner
可以使用 Scanner.Buffer()
方法更改/增加内部缓冲区大小,但如果您的输入是空格分隔的数字列表,我建议更改 .Scanner
如前所述,默认情况下,扫描程序按行拆分输入。相反,请将其更改为按单词拆分输入。bufio
软件包具有“就绪”的拆分功能:bufio。扫描字
。像这样使用它:
scanner := bufio.NewScanner(os.Stdin) scanner.Split(bufio.ScanWords)
现在是扫描仪。Text()
将返回单词(在本例中为数字)而不是完整行,因此默认的 64 KB 限制现在适用于单词,而不是行。您的数字应小于 64 KB。
还要通过调用扫描程序检查扫描是否成功。Err()
.
- 2 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消