- C++环境中,bool类型按 ”非零为true,是零为false“ 规则执行。 在VS2015编译环境下,声明一个bool变量,如果没有定义,编译器会报错,声明bool类型时不会有默认值。
- 把bool类型变量作为键盘输入变量时(用cin来赋值bool),当声明一个bool类型变量x后,默认该变量x为true,且当输入值为非零时,该变量x一直为true。
- 而当声明一个bool类型变量y后,如果给它赋值为false,再通过输入方式(cin)赋值为非0非1时,结果却是false?
#include <iostream>
#include <stdlib.h>
#include <string>
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 <iostream>
#include <stdlib.h>
#include <string>
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,有效解决上边出现的问题。