上下文
学习c++课程,会出现if语句、关系运算符和比较运算符。我没有足够的c++词汇,所以如果以前有人问过我这个问题,我很抱歉。我试着四处寻找,但什么也没找到。
问题
下面举例说明了我困惑的地方。
int n = 1;
if(2 < n <1){
cout << n << endl;
}
当程序运行时,cout语句会打印到控制台(这让我很惊讶(。
问题
C++如何解释if语句中的值、关系运算符和比较运算符?
如果有任何其他有趣的";例外情况";像这样记录在某个地方,你能帮我参考一下吗,谢谢。
Ans尝试
我不完全确定发生了什么。对我来说,中间的数字似乎被跳过了?
在玩了几次数字之后,我现在可以确认中间的数字被跳过了,但我不知道为什么。
如果我通过放大问题来添加参数:
if(2 < n < 0 <1){
cout << n << endl;
}
以及:
if(2 < n < 1 < 1 < 1){
cout << n << endl;
}
现在我真的很困惑。这似乎是什么";事物;处于中间的被忽略。但当n=3时,我发现我的模式有一个异常,导致if语句为"0";false":
int n = 3
if(2 < n < 1 < 1 <1){
cout << n << endl;
}
但如果我把n改成看起来像";任何";(并非详尽无遗(其他数字if语句将再次产生true。
2 < n < 1
没有做你认为应该做的事情:
因为这些运算符从左到右分组,所以表达式
a<b<c
为解析的(a<b)<c
,而不是a<(b<c)
或(a<b)&&(b<c)
-cppreference.com
2 < n
部分将返回一个布尔值,该值将在< 1
中进行比较。
2 < n < 1;
// equal to
(2 < n) < 1;
所以,总的来说,2 < n < 1
是这样流动的:
(2 < n) < 1
。n是否大于2?否,返回false
- CCD_ 11。
false
被提升为一个整数,即0。0是否小于1?是,if
条件为true
这就是为什么当n == 3
在2 < n < 1 < 1 < 1
中时,总的来说你会得到false
:
(2 < 3) < 1 < 1 < 1
。3是否大于2?对返回1
(true
((1 < 1) < 1 < 1
。1小于1吗?不返回0
(false
((0 < 1) < 1
。0是否小于1?对返回1
(true
(1 < 1
。1小于1吗?不返回0
(false
(
正如你所看到的,这是毫无意义的。为了让它发挥作用,你必须进行明确的检查:
(n < 2) && (n > 1)
// is n less than 2 AND is n greater than 1