在c ++中,为什么循环块内和​​for循环内的条件有不同的作用?

时间:2017-02-12 05:00:19

标签: c++ for-loop nested-loops

循环内部的条件和循环块内部的相同条件。 为什么这两个给出不同的输出?

for (i=0;i <5;i++)
{
       printf("\n");
       for (j=0;j <5;j++)
             if (i!=j)
                  printf (" i= %d j= %d ",i,j);
 }


for (i=0;i <5;i++)
{
        printf("\n");
        for (j=0;j <5 &&i!=j;j++)
               printf (" i= %d j= %d ",i,j);
  }

`

2 个答案:

答案 0 :(得分:0)

第一个示例中的内部循环在每次迭代时检查i != j,但仍然在0,...,4范围内迭代j的所有值。

然而,第二个示例中的内部循环会在其条件

时立即停止执行
j < 5 && i != j

是假的。这个内部循环并不总是执行5次迭代:如果i != j的值为j小于5,则循环退出。

答案 1 :(得分:0)

它们产生不同的输出,因为内部循环绝不等同。

测试i != j不影响第一种形式的内循环迭代次数 - 迭代次数始终为5if (i != j) ...将在每次循环迭代。

但是,在第二批代码中,i != j现在是循环条件的一部分,因此循环将在五次迭代后或第一次发现i != j为假时终止(即if { {1}})。

如果i == j为零,请考虑两批代码中发生的情况。

在第一批代码中,内部循环总是迭代五次,并为i的所有值生成输出。对于等于零的j != i,这意味着会生成四行输出(i,每个值j12,{{1但不适用于3)。

在第二批代码中,4等于零,0i(零)的第一个值上将为false,因此内部循环体将永远不会被执行 - 并且不会为i != j的后续值执行循环体。不会产生任何输出。