c - 具有结构和枚举的洗牌



我有一个main.c文件,其中包含所有启动内容。我已经初始化了甲板,但是在将数组的临时值存储到变量中时遇到问题:`

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;
    }
}

'

您正在将deck[x]的地址分配给int变量。

temp = &deck[x];

你想做简单的交换,所以只需将deck[x]的"值"分配给temp,即

temp = deck[x];

更新:
正如cyco130在他的评论中所说,您可以使用-Wall标志在编译时启用更多编译器警告以gcc
但是,AFAIW,编译器应将此问题报告为错误,因为您尝试将int *值存储到没有显式类型转换的int

最新更新