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();
}
这只是阻止人们输入字母而不是数字,但我想知道它是如何做到的
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();
}
这只是阻止人们输入字母而不是数字,但我想知道它是如何做到的
视为cin
布尔值告诉您它是否处于故障状态。if ( cin )
是 的简写if ( cin.ok() )
。因此,只要输入流不正常,在获取一些输入之后,循环就会继续。
获得错误的输入是进入失败状态的一种方式。要退出该状态,请调用clear()
,并忽略违规输入,请调用ignore()
。然后你可以再试一次,就像在这个循环中一样。
如果cin
接收到的数据类型与 不兼容value
,则基本上它返回为 false。
cin >> value
cin
作为结果返回对象。并且它评估false
好像用户输入的类型与特定的重载不匹配(在您的代码中,它是int
),或者不能隐式转换为它。
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