
hh檔案內容是asd換行,想問下各位前輩兩個問題
1.假若我的hh檔案內容是asd,不加換行,是可以輸出理想內容的,但是若檔案內容是asd換行,就會莫名其妙多輸出一行,下面為輸出結果,正常情況下應該只輸出第一行和第三行才對,為什么就一個換行符的差別會多出中間一行?
第1行共有3個字符,1個單詞
第2行共有2個字符,1個單詞
一共2行,5個字符,2個單詞
2.然后我進行除錯發現原因是讀取完第一行,檔案指標又跑到第一行開頭了,又重新讀取本行資料了,但又沒重復讀'\n',按我之前的理解是他讀完第一行之后檔案指標會自動到第二行,發現第二行有EOF標記然后退出才對,到底是哪里理解有誤了
uj5u.com熱心網友回復:
函式又沒長眼睛,它沒法在撞到檔案末尾之前就知道前方是檔案末尾。你的回圈執行第一次,沒到結尾,讀入第一行,去掉末字符(當時是換行)剩下正常字符在str里面。
回圈第二次,沒撞上過檔案尾,因此條件為真,進入回圈體。fgets讀取新行失敗,有兩個后果,第一是撞過了檔案尾,下次feof會回傳真;第二是str沒有更新,還是原來的內容。接下去去掉末字符,按你的說法的話這時去掉的是'd'。檔案指標說的是讀取位置吧,它沒有回傳開頭,還在末尾呢。
回圈條件第三次,這次因為feof為真,所以回圈條件為假,跳過回圈。
綜上。
這樣寫的代碼總會在最后是空行的時候出問題,建議參考四老師在其他帖子的回復進行修改。
uj5u.com熱心網友回復:
謝謝耐心解答,我想問一下能將檔案內容想成asd\nEOF嗎,剛開始檔案指標指向a,每讀入一個字符往后移一位,如果這樣的話,那第一次回圈結束p不就是指向EOF嗎,第二次回圈判斷feof回傳1跳出回圈轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/283770.html
標籤:C語言
下一篇:實作pow()函式的源代碼
