Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ทำไม iostream::eof ในเงื่อนไขลูปจึงถือว่าผิดใน C++


การใช้ 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
        // ไม่ต้องตรวจสอบอีก!
    }
}