将所有结构项与特定规则进行比较

时间:2016-12-23 07:45:26

标签: c conditional

我的结构里面有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

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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以使您的数据结构更适合这种比较,例如

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

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

这使您可以使用简单的循环来测试多个卡的多个属性,而不是硬编码的显式逻辑。

答案 2 :(得分:0)

条件中存在严重错误,应该有大于:如果3张卡之间的3/4元素

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