[問題] 問一個檔案 eof 的問題

看板C_and_CPP (C/C++)作者 (米蟲)時間16年前 (2009/06/10 16:36), 編輯推噓6(607)
留言13則, 2人參與, 最新討論串1/1
宣告兩個檔案物件,準備做文字檔 copy ifstream rfile; ofstream wfile; 在做 copy 的這行 while(!rfile.eof()) { rfile.get(ch); wfile.put(ch); } 非常奇怪的是 明明已經讀到檔尾的最後一個字元了 但是 rfile.eof() 卻沒有判別成檔尾 導致最後一個字元會 copy 兩次 不知道哪裡出問題了 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.219.68.170

06/10 16:38, , 1F
eof() 只會在讀取時發現是 eof 時才會是 true
06/10 16:38, 1F

06/10 16:39, , 2F
那讀完 rfile.get(ch) 時 , 下一次應該判成檔尾了才對阿?
06/10 16:39, 2F

06/10 16:41, , 3F
讀取 "時" 發現
06/10 16:41, 3F

06/10 16:49, , 4F
對呀,我的意思是最後一個字元的下一次,不就應該判出來了
06/10 16:49, 4F

06/10 16:50, , 5F
因為最後一個字元多 copy 了一次
06/10 16:50, 5F

06/10 16:51, , 6F
讀取 "時" 泛指 get(), >>, getline() ... etc
06/10 16:51, 6F

06/10 16:54, , 7F
只要上一次 "讀取" 有讀到東西, eof() 就是 false
06/10 16:54, 7F

06/10 16:58, , 8F
喔喔,是這樣阿,那 get() 怎麼會讀兩次結尾字元呢 ?
06/10 16:58, 8F

06/10 16:59, , 9F
一般普通都這樣吧 while( !rfile.get( ch).eof())
06/10 16:59, 9F

06/10 17:00, , 10F
沒錯...這樣寫就對了...但是還是很奇怪
06/10 17:00, 10F

06/10 17:00, , 11F
為什麼 get 會讀兩次最後一個字元, eof() 才判出來
06/10 17:00, 11F

06/10 17:01, , 12F
最後一個 get 沒有讀任何字元, ch 只是維持它之前的狀態
06/10 17:01, 12F

06/10 17:02, , 13F
原來如此,我終於了解了...感激...這就是問題所在
06/10 17:02, 13F
文章代碼(AID): #1ABt2O_4 (C_and_CPP)
文章代碼(AID): #1ABt2O_4 (C_and_CPP)