3

我对 C++ 很陌生,我遇到了一个问题。
我正在尝试编写二十一点游戏。我有一个大小为 52 的 'char' 类型的数组,里面有不同的卡片,我想洗牌。我不确定如何,但这不是问题。我做了一个名为“ShuffleDeck”的函数,但它不起作用,说它不能返回一个数组。我也无法引用数组。我该怎么办?这是我正在谈论的代码部分。

void ShuffleDeck(bool &rgCards[]) {
    for (int i = 1; i < 52; ++i) {
        //something
    }
    return rgCards[];
}

所有帮助表示赞赏。

4

5 回答 5

3

您使用 astd::vector并随机播放其中的值。最好通过引用函数来传递它并处理原始向量。

从您的代码段中,您期望它做什么并不完全清楚 - 您通过bool引用传递一个数组,但将其作为一个返回,int其语法rgCards[]在该上下文中绝对没有意义。

编辑:根据 Fred 的评论 - 您可以使用random_shuffle.

于 2012-04-05T21:33:31.157 回答
2

从您提供的代码片段看来,您正在尝试将数组的引用传递给ShuffleDeck(). 数组引用的 C++ 语法是数组data-type (&)[N]N元素的数量。将您的功能更改为

void ShuffleDeck( char (&rgCards)[52] ) { ... }

您可以将其设为模板函数并让编译器推断出数组长度

template<size_t N>
void ShuffleDeck( char (&rgCards)[N] ) { ... }

最后,由于您使用的是 C++,您可能应该切换到使用容器类,例如std::arraystd::vector代替 C 样式的数组。

于 2012-04-05T21:41:55.860 回答
2

你也可以这样做

void shuffle(int* deck, int size)
{
  for(int i =0; i < size; i++)
  {
    deck[i] = i;
  }
}

这表明该数组确实是作为指针传递的。

int deck[52];
shuffle(deck,52);
于 2012-04-05T22:29:42.387 回答
1

为了使代码与您编写的代码最相似,我将进行最少的更正:请注意,这&不是必需的,索引应从 0 开始。

void ShuffleDeck(bool rgCards[]) {
    for (int i = 0; i < 52; ++i) {
        //something
    }
}

您对 rgCards[i] 所做的任何更改都将在调用 ShuffleDeck 后可用

于 2012-04-05T21:53:02.317 回答
0

最干净的解决方案,IMO:

class Deck {
  char cards[52];
public:
  void Shuffle();
};

void Deck::Shuffle()
{
  // I can change cards here because both cards and Shuffle are members of Deck
}
于 2012-04-06T07:13:46.820 回答