【问题标题】:c++ cin only boolean(0,1)c++ cin only boolean(0,1)
【发布时间】:2012-11-27 18:58:45
【问题描述】:

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

【问题讨论】:

  • ele 怎么可能同时等于 0 和 1?这个程序是为量子计算机设计的吗?
  • jrok 的回答更有帮助。请更改您接受的答案。

标签: c++ boolean


【解决方案1】:

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

LP :)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不客气!顺便说一句,因为您正在将cin 读入布尔值,我不确定如果您输入除 0/1 之外的任何其他输入会发生什么。你可能想检查一下。
    • 是的,如果我输入数字就可以了。但是当我按 char..."s" 举例时,它给了我无限循环...
    【解决方案3】:

    你不能这样做:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多