c ++ cin only boolean(0,1)

时间:2012-12-10 11:03:10

标签: 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);

3 个答案:

答案 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;