Cin和布尔输入

时间:2014-10-05 14:18:59

标签: c++ boolean cin

我是C ++的新手,我想知道在布尔数据的情况下函数cin是如何工作的。 比方说吧:

bool a;
cin >> a;

我明白如果我给0或1,我的数据a将为true或false。 但是如果我给另一个整数甚至是一个字符串会发生什么呢?

我正在处理以下代码:

#include <iostream>
using namespace std;

int main() {
 bool aSmile,bSmile;
 cout << "a smiling ?" << endl;
 cin >> aSmile;
 cout << "b smiling ?" << endl;
 cin >> bSmile;
 if (aSmile && bSmile == true)
 {
   cout << "problem";
 }
 else cout << "no problem";

 return 0;
}

如果我为两个布尔值赋予0或1的值,则没有问题。 但如果我给另一个整数,这是输出:

a smiling ?
9
b smiling ?
problem

我没有被要求输入bSmile的任何值,似乎跳过了“cin&gt;&gt; bSmile”这一行。 如果我给aSmile一个字符串值,也会发生同样的情况。

发生了什么事?

Thx伙计们! :)

1 个答案:

答案 0 :(得分:10)

来自cppreference

  

如果v的类型为bool且未设置boolalpha,则如果要存储的值为0​,则存储false ,如果要存储的值为1,则存储true,对于std::ios_base::failbit分配给err的任何其他值true,将存储0

由于您输入的值不是1"true"(甚至是"false"clear()),因此流会在其流状态中设置错误位,从而阻止您从进一步的输入。

在阅读bSmile之前,应先调用{p> {{1}}。此外,这是一个很好的理由,为什么你应该总是检查你的输入是否以流本身的条件成功为止。