gpt4 book ai didi

C++:如何从 cin 中删除错误的输入?

转载 作者:太空狗 更新时间:2023-10-29 20:13:48 25 4
gpt4 key购买 nike

我做了一些 cin 操作,在我使用 cin 之前我想清除它的状态并且冲洗它。我该怎么做?我知道 cin.clear() 清除错误状态但刷新 cinbuffer 如何检查它是否为空,如果不是,我应该使用以下哪条语句来清空它,以便以后可以安全地使用 cin

cin.ignore(std::numeric_limits<std::streamsize>::max()); 

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

最佳答案

看来,您检测到一个问题,您想要摆脱错误的输入,例如,输入的行。您可以尝试摆脱 std::cin 缓冲区中的内容,但通常情况下,这效果不佳,因为无法保证流已读取,例如,一条完整的线。此外,为了使其具有潜在用途,您需要确保 stdinstd::cin 不同步,否则 std::cin 永远不会缓冲任何字符:

std::ios_base::sync_with_stdio(false);
// read data using std::cin

if (!std::cin) {
// clean-up
std::cin.clear();
if (std::cin) {
std::cin.ignore(std::cin.rdbuf()->in_avail()); // ignore what is buffered
}
}

in_avail() 是否会返回一个非零值完全取决于所使用的流缓冲区,它可能会忽略比您实际想要忽略的更多的东西。例如,如果 std::cin 的流缓冲区被替换为使用 std::istringstream 的流缓冲区,它可能会消耗来自该源的所有字符。

可能最明智的清理方法是 ignore() 下一个字符或当前行中的字符,使用其中之一

std::cin.ignore();

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

std::streamsizemax() 被用作一个神奇的数字,表示不应将计数视为终止条件。如果您不传递终止字符,流将忽略字符,直到流结束,这可能不是您想要的。

关于C++:如何从 cin 中删除错误的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19469627/

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