เพียงแค่ยังไม่ถึง EOF ไม่ได้หมายความว่าการอ่านครั้งต่อไปจะสำเร็จ
พิจารณาไฟล์ที่คุณอ่านโดยใช้ไฟล์สตรีม (file streams) ใน C++ เมื่อเขียนลูปเพื่ออ่านไฟล์ หากคุณตรวจสอบ stream.eof() คุณก็คือกำลังตรวจสอบว่าไฟล์ถึง 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
// ไม่ต้องตรวจสอบเพิ่มเติม!
}
}