>

포커 게임용 코드를 작성 중이며주요기능으로 다음을 수행합니다 :

const char *suits[4] = { "Spades", "Clubs", "Hearts", "Diamonds" };
const char *faces[13] = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
int deck[4][13] = { 0 };
srand((unsigned)time(NULL));
char *hand[5] = { "\0" };
shuffle(deck);
deal(deck, faces, suits, hand);
for (int i = 0; i < 5; i++) {
    printf("%s", hand[i]);
}

여기서 일반적인 문제가 있습니다. 핸드는 5 장의 카드로 주어진 값을 출력하지 않습니다.

shuffle ()은 단순히 갑판을 섞습니다. 오류가 없으므로이 질문에 포함시키지 않을 것입니다.

deal ()에는 다음 코드가 있습니다 (중괄호/공백 불일치를 무시하고이 사이트의 형식을 조정하고 있습니다) :

void deal(const int wDeck[][13], const char *wFace[], const char *wSuit[], 
char *hand[]) {
int row = 0;    /* row number */
int column = 0; /*column number */
int card = 0;   /* card counter */
                /* deal 5 of the 52 cards */
for (card = 1; card <= 5; card++)
{
    /* loop through rows of wDeck */
    for (row = 0; row <= 3; row++)
    {
        /* loop through columns of wDeck for current row */
        for (column = 0; column <= 12; column++)
        {
            /* if slot contains current card, deal card */
            if (wDeck[row][column] == card)
            {
                char str1[10];
                strcpy(str1, wFace[column]);
                char str2[10];
                strcpy(str2, wSuit[row]);
                char str3[6] = " of ";
                char str[26] = "";
                strcat(str, str1);
                strcat(str, str3);
                strcat(str, str2);
                puts(str);
                hand[card - 1] = str;
                printf("%s\n", hand[card - 1]);
            }
         }
      }
   }
}

if 문의 코드는좋아요입니다. 주어진 값을 인쇄하려고 할 때main ()에서 문제가 발생하지만deal ()에서는 수동으로 값을 인쇄합니다. 함수에 올바르게 전달하지 않는다고 가정하지만 다른 방법으로 프로그램을 올바르게 실행하려고 시도해도 아무 효과가 없습니다.

프로그램의 예는 다음과 같습니다 : 프로그램 실행 예

  • 답변 # 1

    당신은 deal() 에서

     기능 :

    hand[card - 1] = str;
    
    

    str   deal() 에서 돌아 오면 주소가 무효화되는 로컬 문자 배열입니다. 올바른 방법은 hand 의 각 요소 (최대 요소 수 5)에 메모리를 할당하는 것입니다. 그런 다음 str 의 값을 복사하십시오.   strcpy 사용   hand 의 요소로

    예 :

    hand[card - 1] = malloc(26);
     strcpy(hand[card - 1],str);
    
    

관련 자료

  • 이전 matrix - Matlab은 차원이 다른 두 매트릭스를 비교합니다
  • 다음 AppleScript를 사용하여 프로그램 실행 시간을 설정하는 방법