2016-12-23 4 views
0

私は内部に4つのアイテムを持つ構造を持っています。すべての構造アイテムと特定のルールの比較

typedef struct 
    { 
    char colour; 
    char shape; 
    char nr; 
    char p; 
    }CARDS; 

この構造は、内部に多くのアイテムを持っていると私は3で彼らに3を比較したい... ので、例えば、カードの比較[1]、カード[2]、カード[3]。 3枚のカードの間の要素の3/4が等しい場合、SETは= 1となります。 要素が等しくない場合は、セット= 1となります。私はちょうど

If (cards[1].colour=cards[2].colour=cards[3].colour) 
    counter = counter +1; 
If (cards[1].shape=cards[2].shape=cards[3].shape) 
    counter=counter+1; 
If (cards[1].nr=cards[2].nr=cards[3].nr) 
    counter=counter+1; 
If (cards[1].p=cards[2].p=cards[3].p) 
    counter=counter+1; 

場合は、多くの書き込み、カウンタ

If (counter==3||counter==0) 
    set=1; 

ための文はそれを行うには、他のよりエレガントな方法がある場合は作ることができることを確認するために

+3

間の要素の3/4にもOPがやっている場合= c) 'ここにはたくさんのことがあります。 –

+3

おそらく、 'If'ではなく' if'を意味します - 実際のコードを大まかな近似ではなくポストしてください。 –

+0

例は何らかの種類の擬似コードであるようです – e0k

答えて

3

まず、==を使用するときに=を使用している場合は、警告を表示してコンパイルしてください。同時に3つのことを比較しようとしています。 if (a == b == c)はできませんが、代わってif (a == b && a == c)などとする必要があります。

==結果が1に等しく、あなたはそれを追加することによって、ここにいることを使用することができます。

int count = 
    (cards[1].colour == cards[2].colour && cards[1].colour == cards[3].colour) 
    + (cards[1].shape == cards[2].shape && cards[1].shape == cards[3].shape) 
    + (cards[1].nr == cards[2].nr && cards[1].nr == cards[3].nr) 
    + (cards[1].p == cards[2].p && cards[1].p == cards[3].p); 

int set = count == 3 || count == 0; 
+0

int set = count> = 3 ||でなければなりません。カウント== 0; – bunty

+0

カードゲームでは理にかなっていますが、OPが "コード"または英語で説明しているものではありません –

+0

明らかに "3枚のカードの3/4が等しいなら、 3つまたは4つの要素(色、形nr、p)が等しい場合、SETはset = 1です。 4つの要素がすべて等しい場合、条件 "count == 3"はfalseになります。 – bunty

0

をあなたは、例えば、比較のこの種のデータ構造がより容易にすることができ

typedef enum { 
    COLOUR, 
    SHAPE, 
    NR, 
    P, 
    NUM_ATTRS 
} ATTRS; 

typedef struct { 
    char attrs[NUM_ATTRS]; 
} CARD; 

これにより、単純なループを使用して、ハードコードされた明示的なロジックではなく、複数のカードの複数の属性をテストできます。条件に重大なバグがあり

0

、より大きいがあるはずです:(A = Bならばe0k @ 3枚のカード

if (counter >= 3 || counter==0) 
    set=1; 
関連する問題