ページ 1 / 1
||について (おまけもあります)
Posted: 2007年2月23日(金) 01:10
by magu
||という論理演算子について質問です。
例えば
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:||について (おまけもあります)
Posted: 2007年2月23日(金) 01:15
by 管理人
if(①||②||③||④)
ということは、①か②か③か④どれかが満たされたら真です。
if((①||②)||(③||④))
ということは、①か②のどちらか、または、③か④のどちらかが満たされたら真。
つまり両者とも、どれか一つでも満たされたら真になりますから、どちらも同じ意味ですね。
continue;
や
breakで飛ぶのは1つのループだけです、
ですので2重ループの場合、breakやcontinueだけでは、最初に戻れません。
最初に戻すには、
goto文を使うか、それ自体を関数化してreturnで抜けるしかないと思います。
Re:||について (おまけもあります)
Posted: 2007年2月23日(金) 01:24
by 管理人
関数化するとこうなります。
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:||について (おまけもあります)
Posted: 2007年2月23日(金) 01:34
by 管理人
flagを用意して、flag=-1なら処理を抜けるって言う風にするやり方もあると思いますが、ややこしいので省略します。
Re:||について (おまけもあります)
Posted: 2007年2月23日(金) 10:18
by GPGA
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (○○) {
i = 10;
break;
}
}
}
jのループの終了の直後に、iのループの終了があるのであれば
flagを使用せずに、上記のような方法で抜けることもできます。
Re:||について (おまけもあります)
Posted: 2007年2月23日(金) 11:32
by magu
なるほど分かりました!
丁寧に例を挙げてくださって有難うございます!
Re:||について (おまけもあります)
Posted: 2007年2月23日(金) 13:20
by 管理人
>flagを使用せずに、上記のような方法で抜けることもできます。
な、、なるほど、、。目からウロコです。
知りませんでした。是非利用させてもらいますw