无法弄清楚为什么这个函数永远不会返回正确的结果

时间:2010-12-10 04:37:26

标签: c

以下功能应该可以找出我正在制作的这款纸牌游戏中有两张重复的牌。

int duplicate (struct card hand[])
{
    int i = 0, j = 0, duplicate = 0;

    for (i = 0; i < 5; i++)
    {
        for (j = i + 1; j < 5; j++)
        {
            if (hand[i].suit == hand[j].suit && hand[i].face == hand[j].face)
            {
                duplicate++;
            }
        }
    }
    return duplicate;
}

我无法弄清楚为什么,但是当手中卡片的价值相同时,它永远不会增加重复卡片的数量。

我确信它一定是明显的东西,但我没有看到它。

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜对的输入或定义一无所知,==运算符没有按照您对 suit 所做的考虑。那些可以开箱即用的原语或需要特别注意的指针/对象吗?

答案 1 :(得分:0)

您应该告诉我们suithand的{​​{1}}类型 - 可能会影响它们的比较方式(特别是如果它们是指针)。< / p>

此外,您应该告诉我们您传递的数据,获得的结果以及您的期望。例如,如果你传递一张5张牌,其中两张是相同的,它看起来就像你会得到1张(这可能是你所期望的,但你可能会期待2 - 我不是知道)。这是因为您不计算struct card指向的卡片。再次 - 你是否应该取决于你想要/需要的结果。

但另一个例子几乎肯定不是你想要的,如果你传递5张牌,所有牌都是相同的。你可能期望得到5(或者4)的结果,但你得到的是10,因为在什么时候:

i