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

标签 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;
}

我不明白为什么,但是当手牌中的牌的值(value)相同时,它永远不会增加重复牌的数量。

我确信这一定是显而易见的事情,但我没有看到它。

谢谢!

最佳答案

您应该让我们知道 suithand 的类型适用于 struct card - 这可能会影响它们的比较方式(特别是如果它们是指针)。

此外,您应该让我们知道您传递的数据、您得到的结果以及您的期望。例如,如果你手里有 5 张牌,其中两张是相同的,在我看来,你会得到 1 张(这可能是你所期望的,但你可能会期望 2 张 - 我不知道)知道)。这是因为您没有计算 i 指向的卡片。再说一次 - 是否应该取决于您想要/需要的结果。

但另一个几乎肯定不是您想要的例子是,如果您手中有 5 张牌,所有牌都相同。您可能期望结果为 5(或者可能为 4),但您将得到的是 10,因为当:

i == 0, you count the 4 dupes
i == 1, you count the next 3 cards as dupes again
i == 2, the next 2 get counted again,

etc...

关于无法弄清楚为什么这个函数永远不会返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405694/

相关文章:

c - 枚举类型不可用

c - fgets & strstr 似乎不起作用?

c - 如何动态填充指向我创建的结构的指针数组?

c - Linux 内核中 rt.c/deadline.c 中的空函数

c - 如何知道路径,错误和警告存储在eclipse中

c - g_signal 延迟(C、GTK+)

c - 如何在内存中表示极大的 float ?

c - 如何在 C 中处理未知类型的数字?

c:内存分配(发生了什么)

c - 如何将动态分配的结构写入文件