У меня проблемы с чтением со стандартного ввода, используя Go с bufio.Scanner
.
Допустим, у меня есть такой ввод
1 5
2 3
4 5
Я пытаюсь прочитать каждая строка с вызовом этой функции:
func get_arg_multi_int(params *[]int) {
var line string
var scanner *bufio.Scanner = bufio.NewScanner(os.Stdin)
if scanner.Scan() {
line = scanner.Text()
for _, x := range strings.Fields(line) {
i, _ := strconv.Atoi(x)
*params = append(*params, i)
}
}
if err:= scanner.Err(); err != nil {
fmt.Println(err)
}
}
После трех вызовов get_arg_multi_int
я бы ожидал, что params
будет заполняться (каждый раз) как:
[1, 5]
[2, 3]
[4, 5]
Вместо Я получаю следующее:
[1, 5]
[]
[]
Я понятия не имею, почему это происходит. Я подозреваю, что это как-то связано с многократным открытием stdin, но я не могу найти какую-либо (легкодоступную) документацию, которая говорит мне, что именно происходит, когда сканер выходит из области видимости.
Я бы не стал удивляйтесь, узнав, что есть еще какой-то идиоматический c способ добиться того, что пытается сделать приведенный выше код, но мне очень любопытно , почему этот код не работает.
Может ли кто-нибудь прокомментировать, почему я не вижу ожидаемого поведения?
Спасибо,