[問題] C 讀取檔案的換行問題

作者: phoenix286 (糰子大家族)   2021-01-13 11:53:07
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
code: blocks
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
在練習檔案的讀寫時 讀取檔案讀不到下一行
餵入的資料(Input):

預期的正確結果(Expected Output):
fscanf = 1
line = 26.000000,-74.000000,James
fscanf = 1
line = 26.500000,-73.000000,James
fscanf = 1
line = 27.000000,-72.000000,James
fscanf = 1
line = 27.500000,-71.000000,James
fscanf = 1
line = 28.000000,-70.000000,James
錯誤結果(Wrong Output):
fscanf = 1
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
http://codepad.org/f2JGKJsS
補充說明(Supplement):
作者: LPH66 (-6.2598534e+18f)   2021-01-13 12:28:00
因為你是讀 [^\n], 所以換行被卡住了一直讀不進來第一次讀進第一行後停在最後一個換行還沒被讀掉的地方第二次讀一進去就看到換行所以沒讀任何東西就出來了解決法就只要把那個換行讀掉就好, 方法你應該都已經知道
作者: phoenix286 (糰子大家族)   2021-01-13 12:39:00
感謝 多寫一個fscanf(%c)就解決了另外請問有沒有比較簡潔的寫法呢?
作者: NciscalA   2021-01-13 14:04:00
"%79[^\n] "在最後加個空格試試
作者: LPH66 (-6.2598534e+18f)   2021-01-13 14:14:00
樓上這是一個解法, 但要注意因為這個空格會吃掉連續空格所以如果下一行開頭也有空格會被吃掉在這裡是沒有不過在其他的應用要注意
作者: phoenix286 (糰子大家族)   2021-01-13 15:35:00
不太理解為什麼加空格能運作呢 請問這裡的空格是指什麼呢?
作者: LPH66 (-6.2598534e+18f)   2021-01-13 16:46:00
scanf 裡放空格會吃掉輸入中連續的 whitespace 字元這包含空格字元跟換行字元, 它會吃掉輸入中這些字之後丟掉
作者: ddavid (謊言接線生)   2021-01-18 11:10:00
雖然寫起來可能比較反而複雜,但我比較喜歡fgets一行進來後再對那行字串做處理的方式,只要寫成function模組化其實用起來還是方便且出錯容易知道問題例如將原本的code改成先 str_line = fgets(...);然後才用sscanf(str_line, "...", ...);不過fgets讀取有上限長度,這方面還要確認一下使用例會不會容易莫名其妙發生過長列需要額外處理

Links booklink

Contact Us: admin [ a t ] ucptt.com