我是 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 一个字符串值,也会发生同样的情况。
发生什么事了?
来自cppreference:
如果
的类型为v
且未设置bool
,那么如果要存储的值为boolalpha
,则存储0
,如果要存储的值为false
,1
被存储,对于任何其他值true
被分配给std::ios_base::failbit
并且err
被存储。true
由于您输入的值不是
0
或 1
(甚至不是 "true"
或 "false"
),流会在其流状态中设置一个错误位,从而阻止您执行任何进一步的输入。
应在读入 clear()
之前调用
bSmile
。此外,这也是为什么您应该始终通过流本身的条件来检查您的输入是否成功的一个很好的理由。
首先,在C++中,布尔变量只能取两个值,true和false。 如果您想稍后在程序中输入布尔值,可以不初始化变量 例如,bool isMale;
稍后在你的程序中,如果你想给布尔变量'isMale'一个值,你可以通过..
这样做cin >> isMale;
但是请确保您输入的值是 true 或 false,否则程序会抛出错误