I'm studying for upcoming exams and came across this past exam question which doesn't make sense to me.
Consider the following main function:
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;
}
When executed the program prints the following:
x = 0, (0 < x < 10) = 1
x = 5, (0 < x < 10) = 1
x = 10, (0 < x < 10) = 1
Explain exactly what has happened.
That's the question. As far as I know, the last line of output should be "x = 10, (0 < x < 10) = 0". What am I missing?
What do you expect 0 < x < 10
to mean?
It doesn't check whether x
is between 0
and 10
, if that's what you thought.
<
is a binary operator, which follows operator evaluation rules (precedence and associativity).
So 0 < x < 10
actually means (0 < x) < 10
. You'll need two checks to get the result you want (left to you).
0 < x < 10
does not do what you think it does. It does ( 0 < x ) < 10
which is not what you want. The result of 0 < x
( which will be true
or false
) is then checked with < 10
which will also give result as true
( numerically equal to 1 ) or false
( numerically equal to 0 ).
You need
( 0 < x ) && ( x < 10 )
to check whether x
in between them.
So, your first cout
with x=0
is same as ( 0 < 0 )
which gives false and then 0 < 10
( false is numerically 0 ), and hence the result is 1.
Similarly, your second cout
at x=5
first gives result false and then with 0 < 10
, it gives true.
And finally, your last cout
at x=10
first results true, and again true, so result is 1.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With