2013-11-26 50 views
0

我可以张贴整个代码,如果你们想要的,但这里是我的问题的实质:交换两个数组元素在结构中使用C

typedef struct 
{ 
    CardT cards[DECK_SIZE]; 
    int count; 
}DeckT; 

void shuffleDeck(DeckT *deck){ 
    int k=50; 
    DeckT *randCard = deck; 
    DeckT *startCard = deck; 

    while (k>0){ 
    int r = k % 25; 
    int i = 0; 
    for(i=0; i < r; i++, randCard++){ 
      printf("%i %i",i,r); 
    } 

    CardT A; //do I declare A to be a Card Struc or a pointer to the array of cards? 
    A = *randCard;      //this is where my program locks up. 
    *randCard = *startCard;   //swapping pointers seems pointless [hehe] 
    *startCard = A;  

    printf(" yo yo yo shuffle\n"); //doesn't print this line at all, locks up before 
    k--; 
    *startCard++; 
    } 

我明白,我需要交换的实际元素和不是指针,但我不确定如何去做。该函数的基本流程是去除指向我的套牌的两个指针,指向卡片阵列[我需要指定这个?],然后根据k%25交换卡片。

我不担心交换的实际随机性,现在,我只是想知道如何交换两个卡[其本身结构。

回答

0

DeckT *startCard 

应该

CardT *startCard = &deck->cards[0]; 

同上,用于randCard但这个变量可以/应在内环

+0

真棒,谢谢=] – user3037816

0

你有混淆有关的指针使用移动。 Deck*指向甲板结构。如果你加1,它会在第一个之后立即指向一个Deck(就像你有一组甲板一样)。我很肯定你不是那个意思。

要在CardT操作。没有必要使用指针。如果你有两个指数掉,让我们说ij,只需直接在cards阵列上运行:

CardT temp = deck->cards[i]; 
deck->cards[i] = deck->cards[j]; 
deck->cards[j] = temp;