||という論理演算子について質問です。
例えば
if(a<0||b<0||a>480||b>800)
と
if((a<0||b<0)||(a>480||b>800))
という条件は違うのでしょうか。
また全く別の質問なのですが、
for(i=1;i<=4; i++)
for(j=2;j<=8; j++){
...
if(a==0)
continue;
...
}
という処理はjについてのforだけが飛ばされるのでしょうか。
||について (おまけもあります)
Re:||について (おまけもあります)
if(①||②||③||④)
ということは、①か②か③か④どれかが満たされたら真です。
if((①||②)||(③||④))
ということは、①か②のどちらか、または、③か④のどちらかが満たされたら真。
つまり両者とも、どれか一つでも満たされたら真になりますから、どちらも同じ意味ですね。
continue;
や
breakで飛ぶのは1つのループだけです、
ですので2重ループの場合、breakやcontinueだけでは、最初に戻れません。
最初に戻すには、
goto文を使うか、それ自体を関数化してreturnで抜けるしかないと思います。
ということは、①か②か③か④どれかが満たされたら真です。
if((①||②)||(③||④))
ということは、①か②のどちらか、または、③か④のどちらかが満たされたら真。
つまり両者とも、どれか一つでも満たされたら真になりますから、どちらも同じ意味ですね。
continue;
や
breakで飛ぶのは1つのループだけです、
ですので2重ループの場合、breakやcontinueだけでは、最初に戻れません。
最初に戻すには、
goto文を使うか、それ自体を関数化してreturnで抜けるしかないと思います。
Re:||について (おまけもあります)
関数化するとこうなります。
continueやbreakでは抜けられなかったループもこれなら抜けられます。
continueやbreakでは抜けられなかったループもこれなら抜けられます。
int roop(){ int i,j; for(i=0;i<10;i++) for(j=0;j<10;j++) if(○○) return 1; return 0; } int main(){ roop(); return 0; }こんな感じでしょうか?
int i,j; for(i=0;i<10;i++) for(j=0;j<10;j++) if(○○) goto ex1; ex1: //処理 return 0;gotoを使うとこんな感じでしょうか。
Re:||について (おまけもあります)
for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (○○) { i = 10; break; } } }
jのループの終了の直後に、iのループの終了があるのであれば
flagを使用せずに、上記のような方法で抜けることもできます。
Re:||について (おまけもあります)
>flagを使用せずに、上記のような方法で抜けることもできます。
な、、なるほど、、。目からウロコです。
知りませんでした。是非利用させてもらいますw
な、、なるほど、、。目からウロコです。
知りませんでした。是非利用させてもらいますw