0

folks,

I am adding a logic expression in the for loop and it is not behaving as I expected. Could you shine some light on me? Thanks very much.

The following code works fine

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

and I tried to write it this way, it seems the for loop is fully skipped.

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

What is wrong with the 2nd way?

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){

つまり、 をインクリメントiし、0 から開始して、それが より大きいか等しくなるまで続行し、チェックN対象の各要素がa[]1 に等しいかどうかを確認します。

ただし、このコードは次のとおりです。

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

i1未満でN1に等しい限りループa[i]します。したがって、これらの条件のいずれかが false になるとすぐに、ループから抜け出します。

于 2013-01-29T02:58:04.727 に答える
0

a[0] != 1 の場合、ループに入ることはありません。これは、i < N と同様に for ループが実行される条件です。

于 2013-01-29T04:29:40.590 に答える