cin 和布尔输入

我是 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 一个字符串值,也会发生同样的情况.

发生了什么?

xxnj916 回答:cin 和布尔输入

来自 cppreference:

如果v的类型是bool并且没有设置boolalpha,那么如果要存储的值是 0,false被存储,如果要存储的值为1,true被存储,对于任何其他值std::ios_base::failbit 分配给 err 并存储 true.

If the type of v is bool and boolalpha is not set, then if the value to be stored is ​0​, false is stored, if the value to be stored is 1, true is stored, for any other value std::ios_base::failbit is assigned to err and true is stored.

由于您输入的值不是 0 或 1(甚至是 "true" 或 "false") 流在其流状态中设置了一个错误位,阻止您执行任何进一步的输入.

clear() 应该在读入 bSmile 之前调用.此外,这也是为什么您应该始终检查您的输入是否在流本身的条件下成功的一个很好的理由.

这篇关于cin 和布尔输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3181263.html

大家都在问