今天在使用Fscanf读矩阵的时候遇到了一个问题,发现每次遇到换行,就多读一个0的问题
func readMaze(filename string) [][]int {
file, err := os.Open(filename)
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] {
fmt.Fscanf(file,"%d",&maze[i][j])
}
}
return maze
}
分析得出这是由于windows下的格式导致的,在windows下的换行符是\r\n,所以遇到\r会读一个0进去,在linux下换行符只有\n
解决方法1
直接通过修改ide的格式即可,在goland的下方修改:

改成LF即为linux,这种方法我试了没成功,不知道是不是电脑的原因,可以先试一下这种方法
解决方法2
如果是不能避免,那就把这个0读出来,然后扔掉即可,可以在每行后面,多根一句话:
fmt.Fscanf(file,"%d")
解决方法3
使用方法
fmt.Fscan(file,&maze[i][j])
不规定格式的情况下是不会出现多读0
本文探讨了使用Fscanf在Windows环境下读取矩阵时遇到的换行符问题,导致每行末尾多读一个0。分析了问题原因,并提供了三种解决方案,包括修改IDE格式、读取并忽略额外的0以及使用Fscan替代。
1717

被折叠的 条评论
为什么被折叠?



