Сканнер в Go не считывает как надо

Рейтинг: 0Ответов: 1Опубликовано: 07.03.2023

Why the matrix[0] is empty?

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    var n, m int
    fmt.Scan(&n, &m)
    matrix := make([][]byte, n)
    scanner := bufio.NewScanner(os.Stdin)
    for i := 0; i < n; i++ {
        scanner.Scan()
        matrix[i] = []byte(scanner.Text())
    }
    fmt.Println(matrix)

Input:

4 10
**********
*...*....*
*...*....*

Output:

[[] [42 42 42 42 42 42 42 42 42 42] [42 46 46 46 42 46 46 46 46 42] [42 46 46 46 42 46 46 46 46 42]]

Ответы

▲ 0Принят

Вы читаете числа как fmt.Scan(&n, &m). Эта функция читает два токена и останавливается. Так как она останавливается перед концом строки, то сканер в первой строчке ничего не считывает и вы получаете в matrix[0] пустую строку.

Замените ввод чисел на fmt.Scanln(&n, &m) - эта функция считает два числа и конец строки. Поэтому внутри цикла сканер уже будет обрабатывать следующую строку.