2013-04-17 4 views
1

그래서 이전 코드 (카드 데크를 시뮬레이트 함)를 수정하여 더 많은 작업을 수행했습니다. 배열에있는 카드를 가져온 후 제거해야합니다.배열의 이전 요소를 제거하도록이 함수를 수정할 수있는 방법이 있습니까? C

링크 된 목록을 사용하여이 작업을 수행 할 수있는 방법이 있지만 링크 된 목록을 사용하는 방법에 익숙하지 않으며 엄격한 타임 라인에 있기 때문에 도움이되고 싶습니다. 배열을 사용하는 코드를 완전히 변경해야합니다. 구조체와 포인터는 필요하지 않습니다.

void draw(int deck[SIZE]) 
{ 
    int numCards = 10; 
    int i; 
    int hand[numCards]; 
    int card; 
    for(i = 0; i < numCards; i++) 
    { 
     card = deck[i];  
     hand[i] = card;  
     cards(card); 
    } 
} 

이 내가 카드를 손에 추가 될 때 [내가] 카드가 덱에서 제거되도록 수정해야 현재 fucuntion은 [내가] 그래서 난 반복하지 않습니다.

카드는 심지어 불구하고, 당신이 생각하는 그립니다 내가 있기 때문에 수정해야하는 기능입니다 것처럼 셔플 않습니다, 카드를 인쇄하고이 현재의 주요 기능입니다

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#define SIZE 52 

enum faces{Ace = 0, Jack = 10, Queen, King}; 
char * facecheck(int d); 
void shuffle(int deck[]); 
void draw(int deck[SIZE]); 
void cards(int hand); 
int i; 
int main() 
{ 
    int deck[SIZE], i, n; 
    char suits[4][9] = 
    { 
     "Hearts", 
     "Diamonds", 
     "Clubs", 
     "Spades" 
    }; 


    srand(time(NULL)) ; 

    for(i = 0; i<SIZE; i++) 
    { 
     deck[i] = i; 
    }; 

    shuffle(deck); 
    draw(deck); 
    shuffle(deck); 
    draw(deck); 



    return 0; 
} 

무시 될 수있는 기능입니다 카드를 무작위로 순환 시키면, 같은 카드에 두 장의 카드가 동시에 나타날 수 있습니다.

답변

0

삭제를 나타내는 특수 카드 (-1)를 사용할 수 있습니다. 따라서 :

card = deck[i];  
hand[i] = card; 
deck[i] = -1; // deleted 
cards(card); 
+0

특수 카드를 추가 하시겠습니까? –

+0

특수 카드 (-1)를 사용하여 카드가 있는지 또는 삭제되었는지 확인할 수 있습니다. deck [i]의 값은 삭제되지 않는 한 -1이 아닙니다. – user1952500

0

당신은 이전 색인에 다음의 모든 요소를 ​​이동하고 -1 마지막 인덱스를 설정하는 제거 기능을 만들 수 있습니다.

실제로는은 수정할 수없는 정적 할당 크기를 가지고 있기 때문에 C의 배열에서 요소를 제거 할 수 없습니다. 사용자가 할 수있는 것은 이와 비슷합니다.

void remove_from_array(int index, int* array, int size) 
{ 
    int i = 0; 

    while (i < size) 
     { 
     if (i >= index && i == (size - 1)) 
      array[i] = -1; 
     else if (i >= index) 
      array[i] = array[i + 1]; 
     i++; 
     } 
} 

remove_from_array(i, deck, SIZE); 
+0

어떻게 '인덱스'를 설정하면 array [i]가 될까요? 컴파일러에서 모든 값을 채우니까? –

+0

아니요, 색인은 'i'입니다. –

관련 문제