【问题标题】:Shuffling deck of cards with a structure and enum用结构和枚举洗牌
【发布时间】:2014-04-04 06:24:30
【问题描述】:

我有一个包含所有启动内容的 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;
    }

}

`

【问题讨论】:

  • 好吧,ONE 应该是 ACE,;-)
  • 也许this可以帮助你

标签: c arrays struct enums shuffle


【解决方案1】:

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

temp = &deck[x];

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

temp = deck[x];

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

【讨论】:

  • +1。我想补充一点,启用更多警告会在每个主要的 C 编译器中捕捉到这一点。警告是我们的朋友:)
  • 我改变了 temp = &deck[x];到:温度=甲板[x];我收到一条错误消息:从“int”类型分配给“卡”类型时不兼容的类型,反之亦然
  • deck 是 52 个Cards 的数组吗?如果是,那么您是否使用正确的SuitFace 初始化了所有数组元素?如果是,那么在这种情况下,您可以以相同的方式简单地使用temp,其类型为Card,即使用Card temp 而不是int temp
  • 我试过了,效果很好!我在头文件中使用了 Card temp 并在我的函数中引用了它!非常非常感谢
  • 如果它完全解决了您的问题,您应该接受答案(单击答案旁边的复选标记)。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2016-11-26
  • 2015-09-23
  • 2019-02-07
相关资源
最近更新 更多