3

私は C++ の初心者で、問題に遭遇しました。
ブラックジャックのゲームを書こうとしています。さまざまなカードを含む「char」型のサイズ 52 の配列があり、それをシャッフルしたいと考えています。方法はわかりませんが、それは問題ではありません。「ShuffleDeck」という関数を作成しましたが、機能しません。配列を返すことができないと言います。配列も参照できません。これについてどうすればよいですか?これが私が話しているコードの部分です。

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

すべての助けに感謝します。

4

5 に答える 5

3

a を使用してstd::vector、その中の値をシャッフルします。できれば、参照によって関数に渡し、元のベクトルで作業します。

あなたのスニペットから、それが何をすることを期待しているのかは完全には明らかではありません.参照によって配列を渡しますが、そのコンテキストではまったく意味をなさない構文boolで として返します。intrgCards[]

編集:フレッドのコメントによると-使用できますrandom_shuffle.

于 2012-04-05T21:33:31.157 に答える
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 に答える
2

提供したコード スニペットから、配列への参照を に渡そうとしているように見えますShuffleDeck()。配列参照の C++ 構文は次data-type (&)[N]のとおりですN。 は配列内の要素の数です。関数を次のように変更します

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

これをテンプレート関数にして、コンパイラに配列の長さを推測させることができます

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

最後に、C++ を使用しているため、C スタイルの配列の代わりに、std::arrayまたはなどのコンテナー クラスを使用するように切り替える必要があります。std::vector

于 2012-04-05T21:41:55.860 に答える
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 に答える