当程序要求布尔变量时,我希望实现仅限用户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);
答案 0 :(得分:6)
好消息是,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');
}
Reference for ignore()
。您还需要在<limits>
模板中加入numeric_limits
。
Lp:)
答案 1 :(得分:3)
正如克里斯指出的那样,你想做if (cin && (ele == 0 || ele == 1)) break;
答案 2 :(得分:0)
你做不到:
if (cin && ele == 0 && ele == 1) break;
因为它总是假的,因为我不能在同一时间1或0 ......它只能是这个数字中的一个。
if(ele == 0 || ele == 1) break;