gpt4 book ai didi

c++ - 清除流中的故障位

转载 作者:行者123 更新时间:2023-11-28 04:34:27 25 4
gpt4 key购买 nike

我正在使用 istream::get() 从流中读取字符。问题是当您读取 EOF 字符时,get 会设置 failbit。

我想保持流干净,因为真的没有错误,但我确实想保持 eofbit 设置。

如何保持流的当前状态,但取消设置 failbit。我在理解 setstate 和 clear 之间的区别以及如何使用它们在流上“取消设置”位时遇到问题。

最佳答案

要删除某个流状态的单个标志是一个分为两部分的过程。首先,您需要使用 rdstate() 获取流的当前状态。然后对该返回的状态执行按位运算以清除所需的标志。然后你可以调用clear()并将新状态传递给它以设置流的状态。您可以看到所有这些都与此 live example 一起使用:

int main()
{
std::cin.setstate(std::ios_base::failbit | std::ios_base::eofbit);

std::cout << "before:\n";

if (std::cin.fail()) {
std::cout << "now cin is in fail state\n";
}
if (std::cin.eof()) {
std::cout << "now cin is in eof state\n";
}

auto state = std::cin.rdstate(); // get state
state &= ~std::ios_base::failbit; // remove failbit from it
std::cin.clear(state); // clear old state and set new state

std::cout << "\nafter:\n";

if (std::cin.fail()) {
std::cout << "now cin is in fail state\n";
}
if (std::cin.eof()) {
std::cout << "now cin is in eof state\n";
}
}

输出:

before:
now cin is in fail state
now cin is in eof state

after:
now cin is in eof state

关于c++ - 清除流中的故障位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883881/

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