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

ทำไมการใช้ iostream::eof ในเงื่อนไขลูปจึงถือเป็นวิธีผิด?

เพียงแค่ยังไม่ถึง 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
        // ไม่ต้องตรวจสอบเพิ่มเติม!
    }
}