gpt4 book ai didi

c++ - 触发 EOF 时调用 unget

转载 作者:行者123 更新时间:2023-11-28 05:51:49 25 4
gpt4 key购买 nike

我正在从 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”放回流中。在 putback 之后,我希望它将接下来的 5 个字符读作“#1,”,但它读作“#r1”...某处“1,”被覆盖。

编辑/解决:我没有使用 unget()putback(),而是使用了 seekg()tellg()。我使用 tellg() 存储起始位置,然后读取任意多个字符,找到匹配的字符串并返回起始位置 + 匹配字符串的长度。

最佳答案

首先,您需要确保未设置任何iostate 位(failbadeof。在 C++11 中,eof 位将在调用 unget 之前自动清除。

运行后查看stram状态。如果设置了 failbit,那么您忘记了在调用 unget 之前清除流状态。如果设置了 badbit,则存在内部错误。可能流不能再支持了。

putback 不同,库应该支持至少返回一个字符。

关于c++ - 触发 EOF 时调用 unget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com