Cin和布尔输入

Xem*_*ema 7 c++ boolean cin

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

bool a;
cin >> a;
Run Code Online (Sandbox Code Playgroud)

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

我正在处理以下代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

a smiling ?
9
b smiling ?
problem
Run Code Online (Sandbox Code Playgroud)

我没有被要求输入bSmile的任何值,"cin >> bSmile"似乎被跳过了.如果我给aSmile一个字符串值,也会发生同样的情况.

发生了什么 ?

大家好!:)

0x4*_*2D2 10

cppreference:

如果类型vIS boolboolalpha未设置,那么,如果要被存储的值0?,false被存储时,如果要被存储的值是1,true被存储在任何其他的值std::ios_base::failbit被分配到errtrue被存储.

由于您输入的值不是01(甚至"true""false")流在其流状态中设置了错误位,因此阻止您执行任何进一步的输入.

clear()应该在阅读之前调用bSmile.此外,这是一个很好的理由,您应该始终检查您的输入是否以流本身为条件成功.