在这里我试图从用户获得一个整数,循环输入是正确的 .
输入非整数值(例如“dsdfgsdg”)后,cin.fail()返回true,如预期的那样,循环体开始执行 .
在这里,我使用cin.clear()重置cin的错误标志;和cin.fail()按预期返回false .
但是下一次调用cin不起作用并重新设置错误标志 .
有任何想法吗?
#include<iostream>
using namespace std;
int main() {
int a;
cin >> a;
while (cin.fail()) {
cout << "Incorrect data. Enter new integer:\n";
cin.clear();
cin >> a;
}
}
3 回答
在
cin.clear()
之后,你这样做:上面做的是它清除仍留在那里的任何字符的输入流 . 否则cin将继续尝试读取相同的字符并失败
cin.clear()不清除缓冲区;它会重置错误标志 . 因此,您仍然会在缓冲区中输入sting,并且在清除cin缓冲区之前,代码将不允许您输入新数据 .
cin.Ignore()
应该做的伎俩作为一种风格,喜欢这种方法: