||について (おまけもあります)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
magu

||について (おまけもあります)

#1

投稿記事 by magu » 18年前

||という論理演算子について質問です。
例えば
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:||について (おまけもあります)

#2

投稿記事 by 管理人 » 18年前

if(①||②||③||④)
ということは、①か②か③か④どれかが満たされたら真です。
if((①||②)||(③||④))
ということは、①か②のどちらか、または、③か④のどちらかが満たされたら真。

つまり両者とも、どれか一つでも満たされたら真になりますから、どちらも同じ意味ですね。


continue;

breakで飛ぶのは1つのループだけです、
ですので2重ループの場合、breakやcontinueだけでは、最初に戻れません。
最初に戻すには、
goto文を使うか、それ自体を関数化してreturnで抜けるしかないと思います。

管理人

Re:||について (おまけもあります)

#3

投稿記事 by 管理人 » 18年前

関数化するとこうなります。
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:||について (おまけもあります)

#4

投稿記事 by 管理人 » 18年前

flagを用意して、flag=-1なら処理を抜けるって言う風にするやり方もあると思いますが、ややこしいので省略します。

GPGA

Re:||について (おまけもあります)

#5

投稿記事 by GPGA » 18年前

for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        if (○○) {
            i = 10;
            break;
        }
    }
}
 
jのループの終了の直後に、iのループの終了があるのであれば
flagを使用せずに、上記のような方法で抜けることもできます。

magu

Re:||について (おまけもあります)

#6

投稿記事 by magu » 18年前

なるほど分かりました!
丁寧に例を挙げてくださって有難うございます!

管理人

Re:||について (おまけもあります)

#7

投稿記事 by 管理人 » 18年前

>flagを使用せずに、上記のような方法で抜けることもできます。

な、、なるほど、、。目からウロコです。
知りませんでした。是非利用させてもらいますw

閉鎖

“C言語何でも質問掲示板” へ戻る