cin 和布尔输入

问题描述 投票:0回答:2

我是 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 >> bSmile
行似乎被跳过了。 如果我给 aSmile 一个字符串值,也会发生同样的情况。

发生什么事了?

c++ boolean iostream cin
2个回答
15
投票

来自cppreference

如果

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

由于您输入的值不是

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

应在读入

clear()

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


0
投票

首先,在C++中,布尔变量只能取两个值,true和false。 如果您想稍后在程序中输入布尔值,可以不初始化变量 例如,bool isMale;

稍后在你的程序中,如果你想给布尔变量'isMale'一个值,你可以通过..

这样做
cin >> isMale;

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

© www.soinside.com 2019 - 2024. All rights reserved.