在刷算法题的时候遇到了一个关于Scan的bug。在Goland中,我使用
fmt.Scan(&n)
会在标准输入后留下一个换行符\n,使得我在写入数组的时候,数组的第一个值里面总是0。因此我通过
scanner.Scan()
来扫描\n这一行,并抛弃,这样就可以在goland中运行了。但是,我在以下算法网站刷题时候,却并不需要该操作。该算法题为:求区间和。
链接为:求区间和
最终ac的代码:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
//"strings"
)
func main() {
var n int
fmt.Scan(&n) //在读取到n之后,它会在读取到输入后留下换行符\n在标准输入中。随后开始scanner.Scan()进行扫描时候会立刻遇到这个换行符。
scanner := bufio.NewScanner(os.Stdin)
//scanner.Scan() //获取换行符并丢弃,但是在一些刷算法题网站中,这个换行符并不存在
arr := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
line := scanner.Text()
arr[i], _ = strconv.Atoi(line)
}
//fmt.Println(arr)
arrsum := make([]int, n+1)
for i := 1; i <= n; i++ {
arrsum[i] = arrsum[i-1] + arr[i-1]
}
//fmt.Println(arrsum)
for scanner.Scan() {
line := scanner.Text()
arr1 := strings.Fields(line)
//fmt.Println(arr1)
a, _ := strconv.Atoi(arr1[0])
b, _ := strconv.Atoi(arr1[1])
//fmt.Println(a, b)
if a < 0 || b > n-1 {
continue
}
//fmt.Println(arrsum[b+1], arrsum[a])
fmt.Println(arrsum[b+1] - arrsum[a])
}
}