我是 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 一个字符串值,也会发生同样的情况。
发生了什么?
From 参考参数 http://en.cppreference.com/w/cpp/locale/num_get/get:
如果类型为v
is bool
and boolalpha
没有设置,那么如果要存储的值为0
, false
被存储,如果要存储的值是1
, true
被存储为任何其他值std::ios_base::failbit
被分配给err
and true
被储存了。
由于您输入的值不是0
or 1
(甚至"true"
or "false"
) 流在其流状态中设置一个错误位,阻止您执行任何进一步的输入。
clear()
应该在读入之前调用bSmile
。此外,这也是为什么您应该始终使用流本身的条件来检查输入是否成功的一个很好的理由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)