c - 使用结构和枚举洗牌

标签 c arrays struct enums shuffle

我有一个包含所有启动内容的 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 而没有显式类型转换。

关于c - 使用结构和枚举洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22855095/

相关文章:

c - C中的按位运算伪造文件内容

c++ - 在 .cpp 中调用 .c 文件

c - 从文件中精确打印和扫描 (C)

javascript - jQuery 排序功能无法正常工作

c++ - 结构对齐可能会浪费内存?

c - 用于检入 C 的单链表显示

c++ - 新算子+OpenMP动态调度子句

c++ - 编译器不识别实现文件中的类成员函数类型,但在接口(interface)文件中识别

c++ - 如何有效地使用包含来自另一个源文件的运算符的结构定义?

c - 将 Typedef 枚举数组移动到另一个函数中