【发布时间】:2016-05-07 11:36:15
【问题描述】:
我正在从 ifstream 中读取字符,如果这些字符不符合某个条件,那么我 unget() 的次数等于这些字符。在我到达文件末尾之前,这一切都很好。然后如果我尝试 unget(),好位设置为 0。
这意味着没有字符被忽略,当我再次阅读时,我得到空白字符。如果我达到 EOF,我怎么能不正确地解除?
谢谢:)
编辑:
我试图用putback() 替换我的unget(),但是我遇到的错误是某些而不是放回字符似乎覆盖了ifstream 中的字符。这是我正在使用的代码:
if (substr.length() > 0)
{
for (int i = substr.length()-1; i >= 0; --i)
{
std::cout << "at " << i << ": " << substr.at(i) << " ";
infile.putback(substr.at(i));
}
}
其中substr 是要放回流的字符串。我把它按相反的顺序放回去,所以下次按正确的顺序读取。
如果流接下来有以下字符串“,r1”,并且我将“#1”放回流中。放回后,我希望它将接下来的 5 个字符读取为“#1”,但它正在将其读取为“#r1”......某处“1”被覆盖了。
编辑/解决:
我没有使用unget() 或putback(),而是使用seekg() 和tellg()。我用tellg()存储起始位置,然后读取多少个字符,找到匹配的字符串并返回到起始位置+匹配字符串的长度。
【问题讨论】: