cin和布尔输入
cin and boolean input
我是C++的新手,我想知道在布尔数据的情况下函数cin是如何工作的。举个例子:
bool a;
cin >> a;
我知道,如果我给0或1,我的数据a要么是真的,要么是假的。但是,如果我给另一个整数,甚至一个字符串,会发生什么呢?
我正在处理以下代码:
#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"
),流在其流状态中设置了一个错误位,从而阻止您执行任何进一步的输入。
在读入bSmile
之前,应调用clear()
。此外,这也是为什么您应该始终使用流本身的条件来检查您的输入是否成功的一个很好的理由。
首先,在c++中,布尔变量只能取两个值,true&false。如果稍后要在程序中输入布尔值,可以不初始化变量例如,bool是Male;
稍后在程序中,如果要给布尔变量"isMale"一个值,可以通过。。
cin >> isMale;
但是,请确保您输入的值为true或false,否则程序将抛出错误
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 递归函数、布尔语句和输入C++
- 我在使用布尔函数时遇到问题,其中用户输入两个字母并输出字母表中最高的字母
- 布尔函数不会从文本文件中读取所有输入
- 使用字符串流输入/输出布尔值
- islower函数根据输入输出布尔值0或1
- cin和布尔输入
- C++正确的布尔值和双输入
- 布尔计算器如何使用堆栈检查用户输入
- 布尔函数作为输入参数