2

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

3 回答 3

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');
}

参考资料ignore()。您还需要包含<limits>模板numeric_limits

LP :)

于 2012-12-10T11:41:41.330 回答
3

正如克里斯指出的那样,你想做if (cin && (ele == 0 || ele == 1)) break;

于 2012-12-10T11:05:21.300 回答
0

你不能这样做:

if (cin && ele == 0 && ele == 1) break;

因为它总是错误的,因为 ele 不能在同一时间 1 或 0 ...它只能是这些数字之一。

if(ele == 0 || ele == 1) break;
于 2012-12-10T11:06:34.467 回答