[問題] istream的read/write函式如何定位?

看板C_and_CPP (C/C++)作者 (Lucius)時間15年前 (2010/08/03 12:47), 編輯推噓3(305)
留言8則, 3人參與, 最新討論串1/1
ifstream inPut("file.dat", ios::in); inPut.read(reinterpret<char*>(&OBJ), sizeof(class)); 請問這個敘述完成後檔案的讀取位置會在哪裡? 假設以下每格都是sizeof(class)個bytes file □ ̄ ̄未讀取 讀過一筆 ̄ ̄□ □ ̄ ̄讀過兩筆 讀過三筆 ̄ ̄ 並且達eof 上述的觀念正確嗎? 會有個疑問是當我跑 do{ inPut.read(reinterpret<char*>(&OBJ), sizeof(class)); cout<<"hello"<<endl; } while(!inPut.eof()); 三筆資料會印出四個 hello, 第三筆會讀兩次才達到eof 能否幫我指正或是解釋一下為什麼會這樣?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.128.66

08/03 13:06, , 1F
eof要等到read不到資料時才會被舉起來, 所以三筆資料讀
08/03 13:06, 1F

08/03 13:06, , 2F
完以後, 第四次read讀不到資料, 此時eof才會ON, 才會離
08/03 13:06, 2F

08/03 13:07, , 3F
開你的迴圈, 所以你會三筆資料卻看到四次hello:)
08/03 13:07, 3F

08/03 13:14, , 4F
http://0rz.tw/u7njy Google到的說明, 板上search EOF
08/03 13:14, 4F

08/03 13:14, , 5F
也有些討論可以研究看看....:)
08/03 13:14, 5F

08/03 13:40, , 6F
read 就有回傳值告訴你成不成功了, 直接當測試條件問
08/03 13:40, 6F

08/03 13:40, , 7F
謝謝~~!!
08/03 13:40, 7F

08/03 13:40, , 8F
題就解決大半
08/03 13:40, 8F
文章代碼(AID): #1CLvzwLI (C_and_CPP)
文章代碼(AID): #1CLvzwLI (C_and_CPP)