C ++ for循环多条件不一致

时间:2019-01-28 02:02:56

标签: c++ for-loop

有问题的代码:

#include<iostream>

using namespace std;

int main() {
    int a[10] = {0, 1, 0, 1, 0, 1, 1, 0, 0, 1};

    for (int i = 0; i < 10; ++i) if (a[i] == 1) cout<<i<<" ";

    cout<<endl;

    for (int i = 0; i < 10 && a[i] == 1; ++i) cout<<i<<" ";

    cout<<endl;

}

输出:

1 3 5 6 9
// and an empty line

如果我对条件评估的理解是正确的,则两个输出应相同。每次检查条件a[i] == 1时,i会增加。那么,为什么会这样呢?

我已经使用g ++和一个称为ideone link to code的在线想法对它进行了测试。

我相信我在这里缺少一些非常基本的东西,这是一个非常愚蠢的问题,所以请您原谅我。

3 个答案:

答案 0 :(得分:1)

因为a [0] = 0,所以条件循环在i = 0中结束。您要继续的条件是[i] = 1。因此在第一种情况下会完成

答案 1 :(得分:1)

for循环中的条件在每次迭代之前进行评估,如果结果为false,则退出循环。

在第一种情况下,条件为i < 10,只有在 false达到10后,该条件才变为i,因此if中的条件被评估10次,您将得到输出1 3 5 6 9

在第二种情况下,条件为i < 10 && a[i] == 1,当false为0且i为0时,它在第一次迭代时变为a[0]for然后终止循环,并且永远不会评估if语句中的条件,因此您不会获得任何输出。

答案 2 :(得分:0)

不。结果不一样。在第一个中, for 循环滚动到0到9,并且每次内部 if 检查 a 的对应索引是否等于1或没有。因此,第一个的性能很明显。第二个行为完全不同。第二个 for 只要条件成立就成立(因为 a [0] = 0 甚至在开始时都没有成立)。

一个更好的例子是:

int x[]={1, 1, 1, 0, 0, 0, 0, 0, 1, 1};

第一个循环输出0 1 2 8 9,第二个循环输出0 1 2。