关于布尔类型输入问题(bool cin C++)

  • C++环境中,bool类型按 ”非零为true,是零为false“ 规则执行。  在VS2015编译环境下,声明一个bool变量,如果没有定义,编译器会报错,声明bool类型时不会有默认值。  
  • 把bool类型变量作为键盘输入变量时(用cin来赋值bool),当声明一个bool类型变量x后,默认该变量x为true,且当输入值为非零时,该变量x一直为true。
  • 而当声明一个bool类型变量y后,如果给它赋值为false,再通过输入方式(cin)赋值为非0非1时,结果却是false?   
下面通过一个例子说明
#include 
#include 
#include 
using namespace std;

int main(void)
{
	cout << "输入一个bool值:" << endl;
	bool x;        //声明x
	cin >> x;
	cout << "x为:" << boolalpha << x << endl;
	system("pause");
	return 0;
}

当键盘输入3对 x 赋值时,输出结果为 true 。

如果把声明x变量的语句改为:

bool x = false;        //声明定义为false
当键盘输入3对x赋值时,输出结果为false。

  • 从以上我们可以看出

            当bool类型变量通过cin赋值时,如果输入”非0非1“,变量值不改变。

            也就是bool类型变量通过cin进行赋值只能键入0或者1,其他无效。


而在实际中,我们一般不通过cin对bool变量进行键盘赋值,如果需要这么操作,为了避免出错,一般通过设置中间量判断,再对bool变量进行间接赋值


下面通过例子说明:

#include 
#include 
#include 
using namespace std;

int main(void)
{
	bool x = false;
	int a;
	cout << "输入一个bool值:" << endl;
	cin >> a;
	x = a;
	cout << "x为:" << boolalpha << x << endl;
	system("pause");
	return 0;
}

输入3,运行结果为true。


无论对x有没有定义,通过int类型变量a来强制赋值bool类型变量x,有效解决上边出现的问题。


你可能感兴趣的:(C/C++)