การใช้ iostream::eof ในลูปถือว่าผิด เพราะเรายังไม่ได้ถึง EOF (End of File) การที่ eof() คืนค่า true ไม่ได้หมายความว่าการอ่านครั้งต่อไปจะสำเร็จ
เมื่อเราต้องการอ่านไฟล์โดยใช้ไฟล์สตรีม (file streams) ใน C++ และใช้ลูปในการเขียนไฟล์ หากเราตรวจสอบ end of file โดยใช้ stream.eof() เรากำลังตรวจสอบว่าไฟล์ถึงจุดสิ้นสุดหรือยัง
โค้ดตัวอย่าง - วิธีที่ไม่ถูกต้อง
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream myFile("myfile.txt");
string x;
while(!myFile.eof()) {
myFile >> x;
// ต้องตรวจสอบอีกครั้งว่า x ถูกต้องหรือ eof
if(x) {
// ทำบางอย่างกับ x
}
}
}
เมื่อเราใช้สตรีมโดยตรงในลูป เราจะไม่ต้องตรวจสอบเงื่อนไขอีกครั้ง
โค้ดตัวอย่าง - วิธีที่ถูกต้อง
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream myFile("myfile.txt");
string x;
while(myFile >> x) {
// ทำบางอย่างกับ x
// ไม่ต้องตรวจสอบอีก!
}
}