C:如何从cin中删除错误的输入?
发布时间:2020-12-16 09:48:09 所属栏目:百科 来源:网络整理
导读:我做了一些cin操作,在使用cin之前我想清除它的状态和 冲洗它.我该怎么做?我知道cin.clear()会清除错误状态,但要清除cin 缓冲区如何检查它是否为空,如果不是,我将使用哪个以下语句清空它以便以后可以安全地使用cin? cin.ignore(std::numeric_limitsstd::str
我做了一些cin操作,在使用cin之前我想清除它的状态和
冲洗它.我该怎么做?我知道cin.clear()会清除错误状态,但要清除cin 缓冲区如何检查它是否为空,如果不是,我将使用哪个以下语句清空它以便以后可以安全地使用cin? cin.ignore(std::numeric_limits<std::streamsize>::max()); 要么 cin.ignore(std::numeric_limits<std::streamsize>::max(),'n'); 解决方法
看来,你发现了一个问题并想要摆脱错误的输入,例如输入的行.您可以尝试去除std :: cin在其缓冲区中的内容,但通常情况下,这不能很好地工作,因为无法保证流已读取,例如完整的行.另外,为了使它可能有用,你需要确保stdin和std :: 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的流缓冲区,它可能会消耗此源中的所有字符. 可能最明智的清理是忽略()下一个字符或当前行上的字符,使用其中任何一个 std::cin.ignore(); 要么 std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'n'); std :: streamsize的max()用作一个神奇的数字,表示该计数不应被视为终止标准.如果您没有传递终止字符,则流将忽略字符,直到流的末尾可能不是您想要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |