先要明白Fscanf的工作原理
Fscanf在遇到\n才結束
遇到\r時就會把\r替換成0
這就有個問題,要注意自己的文本換行符是什么,在Windows下就是\r\n,在Linux,Mac下就是\n,也就是說這里有個坑,
代碼在Linux和Mac下讀取數據文件是正常的,在Windows下就會遇到各種行末尾有個0,網上辦法用什么替換啊,用什么自定義Scan函數啊,太麻煩了,直接使用自帶IDE將打開的數據文件集換行符改成LF(Linux,Mac換行符)就行了
如下圖Idea
文件右下角LF點擊就可以更換換行符
補充:go中的Fscanf讀到0的問題
今天在使用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
直接通過修改ide的格式即可,在goland的下方修改:
改成LF即為linux,這種方法我試了沒成功,不知道是不是電腦的原因,可以先試一下這種方法
如果是不能避免,那就把這個0讀出來,然后扔掉即可,可以在每行后面,多根一句話:
fmt.Fscanf(file,"%d")
使用方法
fmt.Fscan(file,maze[i][j])
不規定格式的情況下是不會出現多讀0
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
標簽:海南 遼寧 西雙版納 青海 物業服務 安康 電子產品 儋州
巨人網絡通訊聲明:本文標題《完美解決go Fscanf 在讀取文件時出現的問題》,本文關鍵詞 完美,解決,Fscanf,在,讀取,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。