伙计们,
我在 for 循环中添加了一个逻辑表达式,但它的行为不像我预期的那样。你能给我一点光吗?非常感谢。
以下代码工作正常
for (i=0;i<N;++i)
if (a[i] == 1){
....
}
我试着这样写,似乎 for 循环被完全跳过了。
for (i=0;i<N && a[i]==1;++i){
....
}
第二种方式有什么问题?
当条件为真时循环继续。请记住,for 循环for(A; B; C)
可以替换为 [概念上]:
A;
while(B)
{
...
C;
}
所以你有了:
i = 0;
while(i < N && a[i] == 1)
{
...
i++;
}
所以,如果在第一个实例 a[i] 不是 1,那么你永远不会进入循环,而只是去后面的任何内容。这可能不是你想做的,这就是为什么它没有做你想做的……;)
这段代码:
for (i=0;i<N;++i)
if (a[i] == 1){
意思是,increment i
,从 0 开始,一直到大于等于N
,检查每个元素a[]
是否等于 1
然而,这段代码:
while(i < N && a[i] == 1)
只要i
小于N
且a[i]
等于 1,就表示循环。因此,只要其中任何一个条件为假,它就会从循环中中断。
如果 a[0] != 1,则永远不会进入循环。这是执行 for 循环的条件,就像 i < N 一样。