在我使用 ifstream 从文件中读取一行后,有没有办法有条件地将流带回到我刚刚读取的行的开头?
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
}
因此,如果 someCondition 为真,则在下一次 while 循环迭代期间读取的下一行将是我刚刚读取的同一行。否则,下一次 while 循环迭代将使用文件中的以下行。如果您需要进一步说明,请随时询问。提前致谢!
更新#1
所以我尝试了以下方法:
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
}
但是当条件为真时,它不会再次读取同一行。整数在这里是可接受的类型吗?
更新#2:解决方案
我的逻辑有错误。对于任何好奇的人来说,这是我想要的更正版本:
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
}
对tellg() 的调用被移到了末尾,因为您需要寻找到先前读取的行的开头。第一次我调用了tellg(),然后在流甚至改变之前调用了seekg(),这就是为什么它似乎没有改变(因为它真的没有改变)。谢谢大家的贡献。