2016-11-11 17 views
0

私は1週間前にCの勉強を始め、練習のために自分のtictactoeゲームを書くことに決めました。複数の論理演算子|| Cのforループの(OR)条件

私はメイン

for(int i = 1; player1.isWinner!=1 || player2.isWinner!=1 || noWinner!=1; i++){...} 

でゲームループしている - (ドロー)のカウントが変わり、ゲーム終了の条件は選手の一人であることは勝った、または誰が勝っていません。今、それが終了するため

すべて条件が

1.どのようにそれが正しい動作させるためにある場合にのみ実行されますか?

+0

'||'の代わりに '&&'を使う?また、 '_Bool'を使って'!= 1'を取り除くことができます。これにより、条件を少し簡単にすることができます。 –

+1

私はここで問題の核心はブール代数、すなわち[De Morganの法則](https://en.wikipedia.org/wiki/De_Morgan%27s_laws)を誤解していると思います。あなたが数学者の秘密のハンドシェイクBSをすべてスキップすれば分かりやすい。 "Appleは青ではなく、紫色ではありません"と同じことは "Appleは青色でも紫色でもありません"ということです。 – Lundin

答えて

2

誰かが勝った場合、値1ですか?

もしそうなら、あなたはそうでない場合は、これらの条件のいずれかに該当し、ループでチェック必要があります:

!(player1.isWinner==1 || player2.isWinner==1 || noWinner==1) 

あるいはどれも設定されていないときには、チェックして、ループ使用:

(player1.isWinner!=1 && player2.isWinner!=1 && noWinner!=1) 
+0

@ブール値論理を使用すると、0または1-falseまたはif(condition1 == 1 || condition2 == 1)の代わりに 'if(condition1 || condition2)'を使うのが普通です。 – MayeulC

0

は、読みやすさとmaintanabilityを支援するために、よく名前の関数に条件を抽出考えてみましょう:

int hasWinner(/*...*/) 
{ 
    return player1.isWinner == 1 || player2.isWinner == 1 || noWinner == 1; 
} 

それは、その後どのような条件があるべき明らかになった:あなたがあるように見える

for(int i = 1; !hasWinner(/*...*/); i++){ /*...*/ } 
0

何らかの後方ブール論理を使用しています。 1はブール値trueを表す場合は、条件が

!(player1.isWinner || player2.isWinner || noWinner) 

する必要がありますこれはplayer1が勝ったときに1にplayer1.isWinnerを設定することを前提としています。

boolとstdbool.hの値trueまたはfalseを使用する方が簡単でしょう。