cin和布尔输入

cin and boolean input

本文关键字:输入 布尔 cin      更新时间:2023-10-16

我是C++的新手,我想知道在布尔数据的情况下函数cin是如何工作的。举个例子:

bool a;
cin >> a;

我知道,如果我给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;
}

如果我给这两个布尔值都取0或1,就没有问题。但如果我给出另一个整数,这里是输出:

a smiling ?
9
b smiling ?
problem

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

发生了什么?

来自cppreference:

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

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

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

首先,在c++中,布尔变量只能取两个值,true&false。如果稍后要在程序中输入布尔值,可以不初始化变量例如,bool是Male;

稍后在程序中,如果要给布尔变量"isMale"一个值,可以通过。。

cin >> isMale;

但是,请确保您输入的值为true或false,否则程序将抛出错误