2010-12-10 6 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; 
} 

그 이유를 알아낼 수는 없지만, 손에서 카드의 값이 동일한 경우는 중복 카드의 수에 추가하지 않습니다.

Im 확실한 무엇인가 분명해야하지만 나는 그것을 보지 못한다.

감사합니다.

+1

내가 그것을 단계별로 디버거를 사용하는 것이 좋습니다 그리고 당신에게 명백한 표시됩니다. –

+0

어쩌면 당신은 손의 클래스 선언을 포함시킬 수 있습니다. 테스트에서 카드의 정확한 중복을 확인하고 있습니까? – Hanmyo

+0

나에게 잘 보입니다. 전달되는 매개 변수는 사용자가 생각하는 것이 아니어야합니다. 어쩌면 그 기능을 인쇄 할 수 있습니다 .... – wallyk

답변

0

suithand의 유형이 struct card 인 경우 알려 주셔야합니다. 이는 비교 대상 (특히 포인터 인 경우)에 영향을 줄 수 있습니다.

또한 어떤 데이터를 전달했는지, 어떤 결과를 얻었는지, 그리고 무엇을 기대하는지 알려주세요. 예를 들어, 5 장의 카드 한 장을 합격하면 2 장의 카드가 같아서 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

입력 또는 카드의 정의에 대해 아무것도 모르고 내 생각은 == 운영자는 소송 또는 얼굴에 대해 생각하는 일을하지 않는 것입니다. 특별한주의가 필요한 상자 나 포인터/객체와 비교할 수있는 프리미티브입니까?

관련 문제