2012-04-05 39 views
3

我對C++很陌生,而且遇到了一個問題。
我想寫一個21點遊戲。我有一個大小爲52的類型爲'char'的數組,其中包含不同的卡片,我想要對其進行洗牌。我不知道如何,但那不是問題。我做了一個名爲'ShuffleDeck'的函數,但它不起作用,說它不能返回一個數組。我也無法引用數組。我應該怎麼做呢?以下是我正在談論的代碼部分。如何使用函數更改數組?

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

所有幫助表示讚賞。

回答

3

您使用std::vector並將其中的值進行混洗。優選地,通過參考該功能來傳遞它並且處理原始矢量。

從你的代碼段,它不是完全清楚你期望它做的事情 - 通過引用傳遞的bool數組,但返回它作爲一個int與語法rgCards[]這使得完全沒有意義在這方面。

編輯:按照弗雷德的評論 - 你可以使用random_shuffle

+1

或者只是使用['random_shuffle()'](http://stdcxx.apache.org/doc/stdlibref/random-shuffle.html)在'std :: vector'上,而不是滾動你自己的shuffle函數。 – 2012-04-05 21:35:26

+0

@FredLarson酷,所有的東西繼續令我驚歎。 :) – 2012-04-05 21:37:39

+0

是啊,我真的不知道我要去哪裏,但我不想在這裏發佈任何代碼。謝謝您的幫助! – argoneus 2012-04-05 21:39:05

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風格的數組。

1

爲了保持代碼最相似的你寫什麼,我就做最小的更正:注意&不是必需的,該指數應該開始從0

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

你會做任何改變到rgCards [I]將可調用ShuffleDeck

2

你也可以做到這一點

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

這表明陣列作爲確實傳遞一個指針。

int deck[52]; 
shuffle(deck,52); 
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 
} 
相關問題