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