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

In c++, c why conditions inside for loop block and within for loop acts differently?

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

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);
  }

`

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

然而,第二个例子中的内部循环,一旦它的条件

停止执行
j < 5 && i != j

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

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

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

然而,在第二批代码中,i != j 现在是循环条件的一部分,因此循环将在五次迭代后或第一次发现 i != j 为假时终止(即如果 i == j).

考虑如果 i 为零,两批代码会发生什么。

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

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