em đừng xài .eof() :V đọc theo kiểu này:
while (ifs >> c) {
cout << c;
}
-
ifs >> c trả về ifs để có thể đọc tiếp như ví dụ ifs >> a >> b là (ifs >> a) >> b
- Bất kì stream nào cũng có thể ép kiểu ngầm định về
bool, true nghĩa là stream còn đọc được, false nghĩa là stream hết đọc được, có thể do đọc lỗi trước đó hoặc ko còn gì để đọc nữa.
- Vậy viết
while (ifs >> c) nghĩa là “khi đọc vào thành công 1 ký tự c từ ifs”
còn em xài .eof() thì dòng while đó có nghĩa là “khi ifs còn đọc được”, thì sau khi đọc ký tự 'c' cuối cùng, ifs vẫn còn được được :V Chỉ khi nó đọc tiếp ifs >> c là đọc vào ko thành công thì nó mới gán eof cho ifs. Nhưng em ko ktra .eof() giữa ifs >> c và cout << c nên nó in ra c cũ :V
while(!ifs.eof()){ // có dòng ktra kia thì dòng này thừa
ifs >> c;
if (!ifs.eof()) // phải có dòng này ktra
cout << c;
}
thành ra viết lại while (ifs >> c) là gọn nhất :V