c ++ cin only boolean(0,1)

Cle*_*lem 2 c++ boolean

当程序要求布尔变量时,我希望实现仅限用户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)

jro*_*rok 6

好消息是,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 :)