看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
Feis:換行有什麼問題? 11/05 12:01
※ 編輯: Hack 來自: 114.45.105.218 (11/05 12:43)
yvb:fgets() + sscanf() ? 11/05 12:42
yvb:有一行 getc() + ungetc() + fscanf() 被修掉了... 11/05 12:46
yvb:還有, 看 return code 應該也可判斷讀檔結束沒. 11/05 12:46
Hack:不好意思 剛剛覺得我敘事能力不好.. 所以修一下文章 11/05 12:48
yvb:所以可能會有一列只有一個或兩個數字的情況? 11/05 12:50
Hack:不知道一列有幾個數字.. 11/05 12:51
Hack:但是第一列到最後一列行數都是一定的 11/05 12:52
Hack:只是有的檔案可能三行 像是我舉的例子 有的可能十行這樣Orz 11/05 12:53
danny8376:yvb大的fgets() + sscanf()應該比較簡單www 11/05 13:00
yvb:如果一列可能很多行, 那 fgets() 就不知要多大 buffer 了. 11/05 13:02
yvb:當然如果是自已的資料, 就可以知道每列字數上限就是了. 11/05 13:04
Hack:有人可以簡單寫一個範例借小弟參考嗎Orz 11/05 13:20
CaptainH:那你先把第一列有幾個數字算一下就好啦 XD 11/05 14:05
就是不知道該如何算...XD
MOONRAKER:何不把你寫的貼上來給大家改改。 11/05 14:09
MOONRAKER:既然「卡好久」了,那卡住的東西拿來瞧瞧如何。 11/05 14:10
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)
flydragon198:用空白來切割字,用換行符號來判斷該列是否結束 11/05 14:38
flydragon198:如果列不知道有幾個數字,就先宣告個大一點的來儲存 11/05 14:38
yvb:那麼, 改試試看 fgets() + strtof()/strtod() 吧. 11/05 15:06
yvb:sscanf() 可以後面先設很多個變數來接, 最後看 return code, 11/05 15:08
yvb:就可以知道讀到幾個有效資料. 11/05 15:08
cutekid:http://ideone.com/T8qQGY 11/05 15:19
Hack:感謝各位前輩的指導 終於寫出來了~ 11/05 16:07
Hack:感謝cutekid大的教學~!!您的code我研究了好一會 好漂亮的寫法 11/05 16:09
Hack:謝謝大家~~~ 11/05 16:09