提问人:user22526026 提问时间:9/9/2023 最后编辑:Jan Schultkeuser22526026 更新时间:9/9/2023 访问量:56
使用 std::cin 读取布尔值并输入十进制数作为输入 [duplicate] 时出现令人惊讶的结果
Surprising results when reading a bool with std::cin and entering decimal numbers as input [duplicate]
问:
我正在学习变量。我了解到非零值是被考虑的,当我曾经赋值给 时,结果是 ,正如预期的那样。但是当我使用时,结果是.为什么?bool
true
cin
2
bool
true
0.1
false
我尝试过其他数字,例如 、.我的理解是,当绝对值为 时,结果是 ,否则。我不知道这是否正确,但如果正确,那么如何将其与“非零值为真”规则相协调?1.1
-1.1
0.5
-0.5
>= 1
true
false
答:
4赞
HolyBlackCat
9/9/2023
#1
我了解到非零值被认为是真的
这仅适用于在代码中执行的转换,而不适用于 。此处介绍了如何读取标量类型。std::cin >>
std::cin >>
对于 ,它读取单个值(因此,如果传递小数,它将停止读取)。如果是 ,则结果为 ,否则为 。但是,如果数字既不是也不是,它还会设置一个错误标志,您应该检查该标志: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
评论
>>
>>
long
0