do khi đọc hết (ví dụ) 4 bytes cho number rồi thì vẫn chưa thấy eof, phải mất 1 vòng lặp nữa mới thấy eof. Mà khi đọc thêm 1 lần nữa như vậy giá trị number ko thay đổi vì ko đọc được giá trị nào nên ở vòng lặp thừa này in ra giá trị y như giá trị cuối cùng.
đừng bào giờ xài eof. Sửa lại là
while ( inBinFile.read((char*)&number, sizeof(number)) )
{
cout << number << endl;
}
giải thích: hàm istream::read() trả về istream&, là chính istream gọi hàm read() này. istream có thể hiểu là boolean, trả về true nếu istream đọc ko bị lỗi, trả về false nếu istream đọc bị lỗi. Lỗi này có thể là bad, fail, hoặc eof. Ở đây đọc tới hết inBinFile thì flag eof sẽ được set cho inBinFile, làm inBinFile có thể hiểu là boolean false, kết thúc vòng lặp, ko in ra giá trị thừa cuối cùng nữa.