Golang 中 Fscanf读取二维数组的坑
二维数组
6 5
0 1 0 0 0
0 0 0 1 0
0 1 0 1 0
1 1 1 0 0
0 1 0 0 1
0 1 0 0 0
问题代码
func TestReadFile(t *testing.T) {
file, err := os.Open("migong.in")
if err != nil {
panic(err)
}
var row, col int
fmt.Fscanf(file, "%d %d", &row, &col)
maze := make([][]int, row)
for i := range maze {
maze[i] = make([]int, col)
for j := range maze[i] {
_, err := fmt.Fscanf(file, "%d", &maze[i][j])
if err != nil {
t.Error(err)
}
}
}
fmt.Println(maze)
}
输出结果
[[0 0 1 0 0] [0 0 0 0 0] [1 0 0 0 1] [0 1 0 0 1] [1 1 0 0 0] [0 1 0 0 1]]
0 0 1 0 0
0 0 0 0 0
1 0 0 0 1
0 1 0 0 1
1 1 0 0 0
0 1 0 0 1
问题原因
此段代码在windows中会出现问题多读了一个0的情况,在mac os中是不会有问题
原因是因为Fscanf函数遇到'\n'时会结束,但windows的文件类型一般时CRLF(即'\r\n'),而mac os现在一般是LF(即'\n'),所以读到'\r'时会多读一个0。
解决办法
- 在每句行尾加入 读出'\r'但是不存入
for i := range maze { maze[i] = make([]int, col) fmt.Fscanf(file, "%d") // 读出'\r'但是不存入 for j := range maze[i] { _, err := fmt.Fscanf(file, "%d", &maze[i][j]) if err != nil { t.Error(err) } } }
- 切换文本换行类型,如每个ide的右下角都一个会有行分隔符切换 可以点击CRLF进行切换成LF
版权声明:
作者:Ne-21
链接:https://blog.gocos.cn/archives/281.html
来源:云淡风轻
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
海报
Golang 中 Fscanf读取二维数组的坑
二维数组
6 5
0 1 0 0 0
0 0 0 1 0
0 1 0 1 0
1 1 1 0 0
0 1 0 0 1
0 1 0 0 0
问题代码
func TestReadFile(t *testing.T) {
file, err := os.Open("m……

共有 0 条评论