Sau khi tôi đọc một dòng từ một tệp bằng cách sử dụng ifstream, có cách nào để đưa luồng trở lại đầu dòng mà tôi vừa đọc, có điều kiện không?Làm cách nào để trả về ifstream về đầu dòng đã được đọc trong C++?
using namespace std;
//Some code here
ifstream ifs(filename);
string line;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
}
//More code here
}
Vì vậy, nếu someCondition là đúng, dòng tiếp theo được đọc trong lần lặp trong vòng lặp tiếp theo sẽ là cùng dòng mà tôi vừa đọc ngay bây giờ. Nếu không, lặp lại trong vòng lặp tiếp theo sẽ sử dụng dòng sau trong tệp. Nếu bạn cần làm rõ thêm, xin đừng ngần ngại hỏi. Cảm ơn trước!
CẬP NHẬT # 1
Vì vậy, tôi thử như sau:
while(ifs >> line)
{
//Some code here related to the line I just read
int place = ifs.tellg();
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
//More code here
}
Nhưng nó không đọc cùng một dòng một lần nữa khi điều kiện là đúng. Là một số nguyên một loại chấp nhận được ở đây?
CẬP NHẬT # 2: Giải pháp
Có lỗi trong logic của tôi. Dưới đây là phiên bản chỉnh sửa mà làm việc như tôi muốn nó cho bất kỳ những người tò mò:
int place = 0;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
place = ifs.tellg();
//More code here
}
Các cuộc gọi đến tellg() đã được chuyển đến cùng vì bạn cần phải tìm cách đầu đọc trước đó hàng. Lần đầu tiên xung quanh tôi gọi là tellg() và sau đó được gọi là seekg() trước khi luồng thậm chí thay đổi, đó là lý do tại sao nó có vẻ như không có gì thay đổi (bởi vì nó thực sự đã không). Cảm ơn tất cả các bạn vì những đóng góp của bạn.
Sử dụng tellg() để lấy vị trí luồng trước khi bạn đọc dòng và xemkg() để đặt vị trí dòng cho vị trí bạn đã lưu trước đó. –
Nhân tiện, nếu >> chuỗi không nhận được dòng, nhưng từ. Sử dụng std :: getline –
Cảm ơn về getline. Nó có thể đã gây ra lỗi gây phiền nhiễu trong tương lai. –