此while循环在收到错误的输入(非整数)后不等待cin的输入。 cin是否会保持虚假状态?
while (true) {
int x {0};
cout << "> ";
cin >> x;
cout << "= " << x << endl;
}
我希望这个while循环每次都在等待输入,但是当它收到错误的输入时不再发生。
答案 0 :(得分:0)
cin
一旦失败,它将保持无效状态,直到被清除。
clear()(不带参数)可用于在意外输入后取消故障位设置
通过为流错误状态标志分配值来设置它们 州。默认情况下,分配具有效果的std :: ios_base :: goodbit 清除所有错误状态标志。
@Peter指出,您还必须清除缓冲区。
您的示例如下:
while (true) {
int x{0};
cout << "> ";
if (!cin) {
// unset failbit
cin.clear();
// clear the buffer
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cin >> x;
cout << "= " << x << endl;
}