2014-04-04 1 views
0

모든 시작 물건을 포함하는 main.c 파일이 있습니다. 나는 갑판을 초기화했습니다,하지만 난 변수에 배열의 임시 값을 저장하는 데 문제가 있어요 : 당신은 int 변수에 deck[x]의 주소를 할당하는 `구조와 enum이있는 카드의 셔플 데크

enum suit 
{ 
    CLUB, DIAMOND, HEART, SPADE 
}; 

typedef enum suit Suit; 

enum face 
{ 
    ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, 
    QUEEN, KING 
}; 
typedef enum face Face; 

struct card 
{ 
    Suit c_suit; 
    Face c_face; 
}; 

typedef struct card Card; 
void shuffle(Card * deck); 

void shuffle(Card * deck) 
{ 
    int temp; 
    int y, x, t=0; 
    for (x = 52; x > 0 ; x--) 
    { 
     y = rand() % x; 
     temp = deck[x]; 
     deck[x] = deck[y]; 
     deck[y] = temp; 
    } 

} 

`

+0

글쎄, 'ONE'은'ACE' 여야합니다. ;-) –

+0

어쩌면 [this] (http://stackoverflow.com/questions/6127503/shuffle-array-in-c) 도움이 – PrR3

답변

2

. cyco130는 말했다
으로 :

temp = &deck[x];

당신은 즉

temp = deck[x];

UPDATE, 그래서 그냥 temp-deck[x]의 '값'을 지정, 간단한 스왑을 수행 할 그의 의견은 -Wall 플래그를 사용하여 더 많은 컴파일러 경고를 활성화 할 수 있습니다. gcc w hile 컴파일.
그러나 AFAIW,이 문제는 int * 값을 명시 적 형식 변환없이 int에 저장하려고하므로 컴파일러에서 오류로보고해야합니다.

+0

+1이됩니다. 나는 더 많은 경고를 가능하게하는 것이 모든 주요 C 컴파일러에서이를 포착 할 것이라고 덧붙이고 싶다. 경고는 우리의 친구입니다 :) – cyco130

+0

나는 temp = & deck [x]; to : temp = deck [x]; 그리고 'int'타입에서 'Card'타입으로 할당 할 때 호환되지 않는 타입이 나온다. – user3496710

+0

'deck'은 52'Card's의 배열인가? 그렇다면 적절한 'Suit'와'Face'로 모든 배열 요소를 초기화 했습니까? 그렇다면이 경우'temp '를'Card'와 같은 방식으로 간단하게 사용할 수 있습니다. 즉,'int temp' 대신'Card temp'를 사용하십시오. –