我的结构里面有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;
还有其他更优雅的方法吗?
答案 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;