Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tại sao dùng iostream::eof trong điều kiện vòng lặp được coi là sai?


Việc dùng iostream::eof trong vòng lặp được coi là sai vì chúng ta chưa đến cuối tệp (EOF). Vì vậy, nó không có nghĩa là lần đọc tiếp theo sẽ thành công.

Khi chúng ta muốn đọc tệp bằng luồng tệp (file streams) trong C++. Và khi dùng vòng lặp để ghi vào tệp, nếu kiểm tra hết tệp bằng stream.eof(), chúng ta thực chất đang kiểm tra xem tệp đã hết hay chưa.

Mã ví dụ (Cách sai)

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream myFile("myfile.txt");
    string x;
    while(!myFile.eof()) {
        myFile >> x;
        // Cần kiểm tra lại xem x có hợp lệ hay đã hết tệp
        if(x) {
            // Làm gì đó với x
        }
    }
}

Khi dùng trực tiếp luồng trong vòng lặp, chúng ta không cần kiểm tra điều kiện lại.

Mã ví dụ (Cách đúng)

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream myFile("myfile.txt");
    string x;
    while(myFile >> x) {
        // Làm gì đó với x
        // Không cần kiểm tra thêm!
    }
}