C++ CIN仅布尔值(0,1)

c++ cin only boolean(0,1)

本文关键字:CIN 布尔值 C++      更新时间:2023-10-16

我希望在程序要求布尔变量时将用户限制在 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);

好消息是,默认情况下,booloperator>>仅允许'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() .您还需要为numeric_limits模板包含<limits>

LP :)

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

你不能

这样做:

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

因为它总是假的,因为 ele 不能同时在 1 或 0 ...它只能是这个数字中的一个。

if(ele == 0 || ele == 1) break;