2010-12-10 5 views
0

Функция, которая должна быть обнаружена, когда в этой карточной игре я работаю, есть две повторяющиеся карты.Невозможно понять, почему эта функция никогда не возвращает правильный результат.

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

Я не могу понять, почему, но когда значение карт в руке тот же она никогда не добавляет к числу дубликатов карт.

Я уверен, что это должно быть что-то очевидное, но я не вижу его.

Спасибо!

+1

Я предлагаю использовать отладчик, чтобы пройти через него, и что покажет вам очевидное. – 2010-12-10 04:40:52

ответ

0

Вы должны сообщить нам, что тип suit и hand для 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... 
0

Моя догадка ничего о входе или определении карты не зная, что оператор == не делает то, что вы думаете, для костюма или лица. Являются ли эти примитивы, которые можно сравнить с ящиками или указателями/предметами, которые требуют особого внимания?

Смежные вопросы