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

Tại sao sử dụng iostream::eof trong điều kiện vòng lặp là sai?


Chỉ vì chưa đọc đến EOF không có nghĩa là lần đọc tiếp theo sẽ thành công.

Khi đọc file bằng stream C++, nếu bạn kiểm tra stream.eof() trong điều kiện vòng lặp, bạn đang kiểm tra xem file đã đạt EOF hay chưa. Code thường viết như sau:

Ví dụ 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 không
        if(x) {
            // Xử lý x
        }
    }
}

Ví dụ đúng

Khi dùng trực tiếp stream trong điều kiện vòng lặp, bạn không cần kiểm tra điều kiện hai lần:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
    ifstream myFile("myfile.txt");
    string x;
    while(myFile >> x) {
        // Xử lý x
        // Không cần kiểm tra thêm!
    }
}