std::cin循环,即使我调用ignore()和clear()
std::cin loops even if I call ignore() and clear()
我试图设置一个输入检查循环,这样它就可以不断地向用户请求有效的(整数)输入,但它似乎被困在了一个无限循环中。
我已经搜索了解决方案,并尝试了ignore()
和clear()
,但它仍然没有停止。
你能纠正我错在哪里吗?
int num;
cin >> num;
while (cin.fail()) {
cin.ignore();
cin.clear();
cout << "Enter valid number: " << endl;
cin >> num;
}
当流处于错误状态时,
cin.ignore();
什么都不做。在呼叫cin.ignore()
之前,您需要先呼叫cin.clear()
。
此外,cin.ignore()
将只忽略一个字符。要忽略一行输入,请使用:
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
添加
#include <limits>
以便能够使用CCD_ 6。
固定的代码块看起来像:
int num;
while ( !(cin >> num) ) {
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
cout << "Enter valid number: " << endl;
}
当流处于失败状态时,ignore()
不起作用,所以先执行clear()
。
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- 如果 std::vector::clear() 不是静态的,如何在没有实例的情况下调用它?
- C++ cin.ignore() 跳过循环
- 在 STL 容器的 STL 容器上调用 clear
- 了解 cin.fail() 和 cin.clear语言 - Vector 追加程序
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- 更好的方法,而不是在C ++中使用cin.ignore
- 无法获取 wig %ignore 以忽略命名空间中的类,从而导致编译错误
- C++ - 如何知道在哪里放置 cin.ignore
- 如何将光标移动到 cin.clear() 和 cin.ignore() 之后的文本输出末尾?
- 使用 cin.ignore 和 cin.clear CPP 时的奇怪行为
- Cin 不会暂停输入,尽管同时使用了 cin.clear() 和 cin.ignore()
- 当循环不中断时,使用 cin.ignore 和 cin.clear() 来验证输入
- cin.clear() 和 cin.ignore() 不起作用
- cin.ignore() and cin.clear() in C++
- 如何在不使用cin.ignore()和clear()的情况下修复字符串用户输入--C++
- 是cin.clear()和cin.ignore()之间必需的序列
- 仅对前一行输入使用cin.clear()或cin,ignore()
- std::cin循环,即使我调用ignore()和clear()