[問題] 讀取float類型檔案

看板C_and_CPP作者 (阿葉)時間12年前 (2013/11/05 11:59), 編輯推噓6(6018)
留言24則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C 問題(Question): 讀取的檔案內容如下: 4.489013 3.949385 1 //放至陣列array[0][1].array[0][2].array[0][3] 3.234519 3.032182 1 //放至陣列array[1][1].array[1][2].array[1][3] 2.339381 3.233512 1 //以此類推 3.067888 3.272515 1 3.337977 3.214286 1 想將這些數儲存至二維陣列中, 遇到換行則陣列也換列,如上所示。 麻煩大家幫忙解惑....已經卡好久了QQ 感激不盡!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.105.218

11/05 12:01, , 1F
換行有什麼問題?
11/05 12:01, 1F
※ 編輯: Hack 來自: 114.45.105.218 (11/05 12:43)

11/05 12:42, , 2F
fgets() + sscanf() ?
11/05 12:42, 2F

11/05 12:46, , 3F
有一行 getc() + ungetc() + fscanf() 被修掉了...
11/05 12:46, 3F

11/05 12:46, , 4F
還有, 看 return code 應該也可判斷讀檔結束沒.
11/05 12:46, 4F

11/05 12:48, , 5F
不好意思 剛剛覺得我敘事能力不好.. 所以修一下文章
11/05 12:48, 5F

11/05 12:50, , 6F
所以可能會有一列只有一個或兩個數字的情況?
11/05 12:50, 6F
Hack:不知道一列有幾個數字.. 11/05 12:51

11/05 12:52, , 7F
但是第一列到最後一列行數都是一定的
11/05 12:52, 7F

11/05 12:53, , 8F
只是有的檔案可能三行 像是我舉的例子 有的可能十行這樣Orz
11/05 12:53, 8F

11/05 13:00, , 9F
yvb大的fgets() + sscanf()應該比較簡單www
11/05 13:00, 9F

11/05 13:02, , 10F
如果一列可能很多行, 那 fgets() 就不知要多大 buffer 了.
11/05 13:02, 10F

11/05 13:04, , 11F
當然如果是自已的資料, 就可以知道每列字數上限就是了.
11/05 13:04, 11F

11/05 13:20, , 12F
有人可以簡單寫一個範例借小弟參考嗎Orz
11/05 13:20, 12F

11/05 14:05, , 13F
那你先把第一列有幾個數字算一下就好啦 XD
11/05 14:05, 13F
就是不知道該如何算...XD

11/05 14:09, , 14F
何不把你寫的貼上來給大家改改。
11/05 14:09, 14F

11/05 14:10, , 15F
既然「卡好久」了,那卡住的東西拿來瞧瞧如何。
11/05 14:10, 15F
float Array[579][3]; //目前只能寫死陣列大小 int count = 0; char str[100]; FILE *fileIN = fopen("input.txt","r"); if(fileIN == NULL) perror("Error\n"); else { while( fgets(str,100,fileIN) != NULL ) { sscanf(str,"%f %f %f",&Array[count][0], &Array[count][1],&Data[count][2]); //目前只能寫死輸入行數 count++; } } MOON大,我目前只能寫死輸入的行數、列數 陣列大小可能可以用動態陣列解決 但不知道該怎麼解決判斷行數的問題... ※ 編輯: Hack 來自: 140.115.51.180 (11/05 14:27) ※ 編輯: Hack 來自: 140.115.51.180 (11/05 14:28)

11/05 14:38, , 16F
用空白來切割字,用換行符號來判斷該列是否結束
11/05 14:38, 16F

11/05 14:38, , 17F
如果列不知道有幾個數字,就先宣告個大一點的來儲存
11/05 14:38, 17F

11/05 15:06, , 18F
那麼, 改試試看 fgets() + strtof()/strtod() 吧.
11/05 15:06, 18F

11/05 15:08, , 19F
sscanf() 可以後面先設很多個變數來接, 最後看 return code,
11/05 15:08, 19F

11/05 15:08, , 20F
就可以知道讀到幾個有效資料.
11/05 15:08, 20F

11/05 15:19, , 21F
11/05 15:19, 21F

11/05 16:07, , 22F
感謝各位前輩的指導 終於寫出來了~
11/05 16:07, 22F

11/05 16:09, , 23F
感謝cutekid大的教學~!!您的code我研究了好一會 好漂亮的寫法
11/05 16:09, 23F

11/05 16:09, , 24F
謝謝大家~~~
11/05 16:09, 24F
文章代碼(AID): #1IU6qYES (C_and_CPP)