使用 std::cin 读取布尔值并输入十进制数字作为输入时的令人惊讶的结果[重复]

问题描述 投票:0回答:1

我正在学习

bool
变量。我了解到非零值被视为
true
,当我使用
cin
2
分配给
bool
时,结果是
true
,正如预期的那样。但是当我使用
0.1
时,结果是
false
。这是为什么?

我尝试过其他号码,例如

1.1
-1.1
0.5
-0.5
。我的理解是,当绝对值为
>= 1
时,则结果为
true
,否则为
false
。我不知道这是否正确,但如果是,那么如何将其与“非零值为真”规则相协调?

c++ boolean visual-studio-2022 iostream
1个回答
4
投票

我了解到非零值被认为是真实的

这只适用于代码中执行的转换,不适用于

std::cin >>
std::cin >>
如何读取标量类型在 here 进行了描述。

对于

bool
,它读取单个
long
值(因此,如果您传递小数,它会在
.
处停止读取)。如果是
0
,则结果是
false
,否则是
true
。但如果该数字既不是
0
也不是
1
,它还会设置一个错误标志,您应该检查该标志:

#include <iostream>

int main()
{
    bool b = false;

    if (std::cin >> b)
        std::cout << "success, b=" << b << '\n';
    else
        std::cout << "failure, b=" << b << '\n';
}

对于

0
1
,分别打印
success, b=0
...=1
。例如
2
-1
,这将打印
failure, b=1

如果您使用

std::boolalpha
,则不会发生任何情况,而是需要字符串
true
false
(或其他字符串,如果您使用非默认区域设置)。

© www.soinside.com 2019 - 2024. All rights reserved.