我正在为即将开始的考试而学习,并且遇到过这个对我来说没有意义的考试题。
考虑以下主要功能:
int main()
{
int x = 0;
cout << "x = " << x << ", (0 < x < 10) = " << (0 < x < 10) << endl;
int x = 5;
cout << "x = " << x << ", (0 < x < 10) = " << (0 < x < 10) << endl;
int x = 10;
cout << "x = " << x << ", (0 < x < 10) = " << (0 < x < 10) << endl;
return 0;
}
执行程序时,程序将打印以下内容:
x = 0, (0 < x < 10) = 1
x = 5, (0 < x < 10) = 1
x = 10, (0 < x < 10) = 1
准确解释发生了什么。
这就是问题所在。据我所知,输出的最后一行应该是&#34; x = 10,(0
答案 0 :(得分:10)
您期望0 < x < 10
的意思是什么?
它不会检查x
是否在0
和10
之间,如果这是您的想法。
<
是一个二元运算符,它遵循运算符评估规则(优先级和关联性)。
所以0 < x < 10
实际上意味着(0 < x) < 10
。您需要两次检查才能获得所需的结果(留给您)。
答案 1 :(得分:3)
0 < x < 10
没有按照您的想法行事。 ( 0 < x ) < 10
这不是你想要的。然后使用0 < x
检查true
(将false
或< 10
)的结果,其结果为true
(数值等于1)或false
(数值等于0)。
你需要
( 0 < x ) && ( x < 10 )
检查它们之间是否有x
。
因此,您的第一个cout
与x=0
相同,( 0 < 0 )
与0 < 10
相同,然后cout
(false在数字上为0),因此结果为1。
同样,您在x=5
的第二个0 < 10
首先将结果设为false,然后使用cout
,则结果为真。
最后,你x=10
\begin{equation} x=2 \end{equation}
的第一个结果为真,再次为真,结果为1。