作者jehovah (Lucius)
看板C_and_CPP
標題[問題] istream的read/write函式如何定位?
時間Tue Aug 3 12:47:52 2010
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
推 VictorTom:eof要等到read不到資料時才會被舉起來, 所以三筆資料讀 08/03 13:06
→ VictorTom:完以後, 第四次read讀不到資料, 此時eof才會ON, 才會離 08/03 13:06
→ VictorTom:開你的迴圈, 所以你會三筆資料卻看到四次hello:) 08/03 13:07
→ VictorTom:也有些討論可以研究看看....:) 08/03 13:14
推 loveme00835:read 就有回傳值告訴你成不成功了, 直接當測試條件問 08/03 13:40
→ jehovah:謝謝~~!! 08/03 13:40
→ loveme00835:題就解決大半 08/03 13:40