在 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
每个值 1
、2
、3
、4
但不适用于 0
).
在第二批代码中,i
等于零,i != j
在 j
的第一个值(零)上将为假,因此内部循环体永远不会被执行 - 并且循环体将不会为 j
的后续值执行。不会产生任何输出。
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
每个值 1
、2
、3
、4
但不适用于 0
).
在第二批代码中,i
等于零,i != j
在 j
的第一个值(零)上将为假,因此内部循环体永远不会被执行 - 并且循环体将不会为 j
的后续值执行。不会产生任何输出。