2016-12-23 30 views
0

我有一个内部有4个项目的结构。比较具体规则的所有结构项目

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

该结构内有许多项目,我想通过3至他们3比较.. 所以比较例如卡[1],卡[2],卡[3]。 如果3张牌之间3/4的元素相等,那么我们有一个SET,所以set = 1。 如果没有元素相等,我们再次有set = 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语句做出计数器

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

是否有其他更优雅的方式来做到这一点?

+3

@ e0k之间的所有元素的3/4还OP做,如果(A = B = c)'所以这里有很多事情要做。 –

+3

你可能也意味着'if'而不是'If' - 请发布实际代码,而不是粗略的近似值。 –

+0

这些示例似乎是某种类型的伪代码 – e0k

回答

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 || count == 0; – bunty

+0

@bunty对于纸牌游戏来说是有意义的,但这不是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

有在条件一个严重的错误,应该有一个大于:如果3卡

if (counter >= 3 || counter==0) 
    set=1;