当程序要求布尔变量时,我希望实现仅限用户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);
Run Code Online (Sandbox Code Playgroud)
好消息是,operator>>对于bool在默认情况下只允许'0'或'1'作为有效输入.这意味着您不需要在读取后显式检查值 - 如果流状态正常,那么您的bool:
bool ele;
if (!(cin >> ele)) {
// error;
}
Run Code Online (Sandbox Code Playgroud)
当你输入类似的东西时,你得到一个无限循环的原因"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');
}
Run Code Online (Sandbox Code Playgroud)
参考ignore().您还需要包括<limits>的numeric_limits模板.
Lp :)