给布尔类型数据传入一些非0浮点数,布尔类型数据为0

vs2012环境下,给布尔类型数据传入一些非0浮点数,布尔类型数据为0,麻烦讲解一下
int main(){
//布尔类型输入
    bool flag = true;
    cout << "请输入布尔型变量:" << endl;
    cin >> flag;
    cout << flag << endl;

    //while(1)
    //{
    //    float t=0;
    //    cin>>t;
    //    cout <<(bool) t<< endl;
    //}
    system("pause");
    return 0;
}


img

我自己做的博客
http://t.csdn.cn/gQHSf
你可以看看。
知识点是bool类型,当你输入一个非0的数字的时候会默认为1
但是vs2022和 vs2015对这个方面有异议,vs2015当bool类型为false的时候,你输入任何非0非1的数都为0

你输入1.5呢?
bool实际相当于整数,你输入0.5,1.5等等,会自动截取小数点前的数值作为输入数

你犯了个初学者容易犯的错误,把cin和cout理解为强制转换了
其实cin并不能转换类型
这跟你执行bool b=0.5是完全不一样的
作为新手来说,研究不按照规定录入内容会得到什么奇怪的结果没有意义
你就应该按照规定的格式录入数据
或者为了避免别人不按规定的格式录入数据,你的数据格式应该是字符串,然后再通过判断字符串内容是否符合规则,提示错误信息或者转换成对应的正确格式进行计算


可以看下cpp参考手册中的 c++-布尔