考试问题。如何在cout中处理布尔值

时间:2015-04-27 14:12:32

标签: c++

我正在为即将开始的考试而学习,并且遇到过这个对我来说没有意义的考试题。

考虑以下主要功能:

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

2 个答案:

答案 0 :(得分:10)

您期望0 < x < 10的意思是什么?

它不会检查x是否在010之间,如果这是您的想法。

<是一个二元运算符,它遵循运算符评估规则(优先级和关联性)。

所以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

因此,您的第一个coutx=0相同,( 0 < 0 )0 < 10相同,然后cout(false在数字上为0),因此结果为1。

同样,您在x=5的第二个0 < 10首先将结果设为false,然后使用cout,则结果为真。

最后,你x=10 \begin{equation} x=2 \end{equation}的第一个结果为真,再次为真,结果为1。