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!
}
}