当程序要求布尔变量时,我希望实现将用户限制为仅 0 或 1。我试图这样做,但它不起作用。它仍然一直要求我输入。
bool ele;
do{
cout << "Elektro:\t";
cin >> ele;
if (cin && ele == 0 && ele == 1) break;
cin.clear();
cout << "Neveljaven vnos!" << endl;
}while(true);
好消息是,operator>>
默认bool
情况下只允许'0'
或'1'
作为有效输入。这意味着您不需要在读取后显式检查值 - 如果流状态正常,那么您的bool
:
bool ele;
if (!(cin >> ele)) {
// error;
}
当你输入类似的东西时你得到一个无限循环的原因"cvdsavd"
是你只清除错误标志,但不要摆脱坏字符。因此,您的循环不断尝试,但永远无法获得有效输入。你需要摆脱垃圾:
bool ele;
while (!(std::cin >> ele)) {
std::cout << "Neveljaven vnos!\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
参考资料ignore()
。您还需要包含<limits>
模板numeric_limits
。
LP :)
正如克里斯指出的那样,你想做if (cin && (ele == 0 || ele == 1)) break;
你不能这样做:
if (cin && ele == 0 && ele == 1) break;
因为它总是错误的,因为 ele 不能在同一时间 1 或 0 ...它只能是这些数字之一。
if(ele == 0 || ele == 1) break;