0

伙计们,

我在 for 循环中添加了一个逻辑表达式,但它的行为不像我预期的那样。你能给我一点光吗?非常感谢。

以下代码工作正常

for (i=0;i<N;++i)
    if (a[i] == 1){
        ....
    }

我试着这样写,似乎 for 循环被完全跳过了。

for (i=0;i<N && a[i]==1;++i){
    ....
}

第二种方式有什么问题?

4

3 回答 3

4

当条件为真时循环继续。请记住,for 循环for(A; B; C)可以替换为 [概念上]:

A;
while(B)
{
   ...
   C;
}

所以你有了:

i = 0;
while(i < N && a[i] == 1)
{
   ...
   i++;
}

所以,如果在第一个实例 a[i] 不是 1,那么你永远不会进入循环,而只是去后面的任何内容。这可能不是你想做的,这就是为什么它没有做你想做的……;)

于 2013-01-29T02:54:43.147 回答
0

这段代码:

for (i=0;i<N;++i)
    if (a[i] == 1){

意思是,increment i,从 0 开始,一直到大于等于N,检查每个元素a[]是否等于 1

然而,这段代码:

while(i < N && a[i] == 1)

只要i小于Na[i]等于 1,就表示循环。因此,只要其中任何一个条件为假,它就会从循环中中断。

于 2013-01-29T02:58:04.727 回答
0

如果 a[0] != 1,则永远不会进入循环。这是执行 for 循环的条件,就像 i < N 一样。

于 2013-01-29T04:29:40.590 回答