int value(0);
while (!(std::cin >> value)) { //THIS LINE RIGHT HERE IS BUGGING ME(am really a noob)
cout << "you entered a non-digit character\n";
cin.clear();
cin.ignore();
}
这只是阻止人们输入字母而不是数字,但我想知道它是如何做到的
答案 0 :(得分:2)
将cin
作为布尔值处理会告诉您它是否处于失败状态。 if ( cin )
是if ( cin.ok() )
的简写。因此,只要输入流不 OK,在进行一些输入后,循环就会继续。
获取错误输入是达到失败状态的一种方法。要退出该状态,请致电clear()
,并忽略有问题的输入,请致电ignore()
。然后你可以再试一次,就像在这个循环中一样。
答案 1 :(得分:1)
如果cin
收到的数据类型与value
不兼容,那么基本上它会返回false。
答案 2 :(得分:0)
cin >> value
返回cin
个对象。如果用户输入的类型与特定的重载(在代码中,它是false
)不匹配,则评估为int
,或者不能隐式转换为它。
答案 3 :(得分:0)
cin
是类istream
的对象,表示标准输入流。它对应于cstdio
流stdin
。
operator >>
重载返回对同一流的引用,并且可以根据通过转换运算符的内部流状态,在布尔条件下对true
或false
进行评估。 cin
提供格式化的流提取。
操作
int value;
!(std::cin >> value)
如果数值为,将失败 输入,如果输入非数字值,则返回true。
cin.clear(); // will reset the state of stream
cin.ignore(); // ignore one or more characters