Tôi muốn biết nếu và tại sao seekg(0)
không được yêu cầu xóa eofbit
của luồng. Tôi đang ở một điểm mà tôi đã đọc tất cả các dòng, do đó EOF
đã đạt được (nhưng không có failbit
được đặt) và muốn quay lại với seekg()
đến vị trí hợp lệ và đọc lại một số ký tự. Trong trường hợp này, seekg(0)
có vẻ "hoạt động" với tập hợp eofbit
, nhưng ngay sau khi tôi cố gắng đọc từ luồng, thì failbit được đặt. Đây có phải là logic, đúng hay là việc triển khai của tôi không tốt? Tôi có nên nhận ra trường hợp này và xóa eofbit bằng tay (nếu không đặt được failbit)?Tại sao không thấy kg (0) xóa trạng thái eOF của luồng?
EDIT:
Chương trình sau đây được cung cấp bởi một độc giả cho kết quả khác nhau trong việc thực hiện của tôi (. Mingw32-C++ exe (TDM-2 mingw32) 4.4.1):
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::istringstream foo("AAA");
std::string a;
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo.seekg(0);
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 0 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 1
}
Các ý kiến trên là từ người dùng đã thử chương trình đó trong quá trình triển khai của mình. Tôi nhận được các kết quả này:
1 0
1 0
1 1
1 1
Vâng, bạn phải tự thiết lập lại tình trạng của con suối. –
@Martin: Dường như là tiêu chuẩn cũ so với vấn đề tiêu chuẩn mới. – Anonymous