2014-10-30 18 views
0

所以我的問題是,我試圖讓我在hand1 [o]之後得到的數組(從第一個數組卡[]中隨機取出5個數字]到開關中以檢測它是否齊平。例如,如果手1的開關[1] - 手1 [0] = 1;手1 [2] - 手[1] = 1 ...等等 printf(「從1到5的齊平」)如何在C++中使用帶開關的數組?

然而,tbh ,我甚至不知道要在switch()或void corrida()的圓括號內放置什麼。 我試過放置hand1 []或hand1 [],但它表示hand1不是一個常量值。

PS我知道有些東西是西班牙語(因爲這是西班牙語課)

void baraja(); 
void jugadores(); 
void jugadores(k); 
int cards[52] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13 }; 
int hand1[5]; 
int x, y; 
int l, k, z; 

int main() 
{ 
    srand(time(0)); 
    baraja(); 
    jugadores(); 
} 

void baraja() 
{ 

for (l = 1; l <= 52; l++) 
{ 
    x = rand() % 52; 
    y = rand() % 52; 
    int temp = cards[x]; 
    cards[x] = cards[y]; 
    cards[y] = temp; 
} 

printf("La baraja revuelta es:\n"); 
for (k = 0; k <= 51; k++) 
{ 
    printf("%d ", cards[k]); 
} 
printf("\n\n"); 
} 

void jugadores(k) 
{ 
int o, n = 5; 
printf("Tus cartas son:\n"); 
for (o = 0; o <= 4; o++) 
{ 
    k = rand() % 52; 
    printf("%d ", cards[k]); 
    hand1[o] = cards[k]; 
} 
printf("\n\n"); 

for (o = 0; o < n ; o++) 
{ 
    for (z = 1; z < (n - o); z++) 
    if (hand1[z - 1] > hand1[z]) 
    { 
     int temp = hand1[z - 1]; 
     hand1[z - 1] = hand1[z]; 
     hand1[z] = temp; 
    } 
} 

printf("Tus cartas en orden incremental son:\n"); 
for (o = 0; o <= 4; o++) 
{ 
    printf("%d ", hand1[o]); 
} 
printf("\n\n"); 
} 

void corrida() 
{ 
switch (hand1) 
{ 
case (hand1[1] - hand1[0] = 1) : 

} 
} 
+1

我不相信'switch'在這裏是正確的選擇。 – crashmstr 2014-10-30 17:59:42

+0

你知道有什麼功能可以幫助我嗎?問題在於開始編程的基礎知識,所以我只學習瞭如果和切換爲「條件」/ – Seung 2014-10-30 18:00:59

+0

'case'標籤需要具有常數值'case(hand1 [1] - hand1 [0] = 1):'doesn沒有固定的價值。除此之外'switch(hand1)'沒有意義,'hand1'的值永遠不會改變。 – 2014-10-30 18:02:11

回答

1

您沒有正確使用switch

switch語句的思想是獲取一個可能具有多個值的表達式,然後在每種可能性上做不同的事情。在C++中,只允許切換基本上是整數的東西:intchar類型,而不是字符串(您可以使用哪種Java)或陣列。

但是,switch不適合在此處使用,因爲您有興趣同時比較多個表達式的值。使用具有多個表達式的if結構會更好。喜歡的東西:

if(hand1[1] - hand1[0] == 1 && hand1[2] - hand1[1] == 1 && ...) 

你也能做出這樣更具可讀性通過使用短「沖洗調查」的算法,象下面這樣:

bool hasFlush(){ 
    for(int i = 1; i < length-of-hand1; i++){ 
     if(hand1[i] - hand1[i-1] != 1) return false; 
    } 
    return true; 
} 

請注意,我還沒有測試此代碼;這只是一個普遍的想法。請注意,正如Baldrickk在評論中指出的那樣,此方法僅在hand1按升序排序時纔有效。示例手{2, 4, 3, 5, 1}將不會被檢測爲同花,即使它明顯是一個。有許多方法可以修改算法,使其無需排序即可工作。


我相信你也可以打開bool,但我不知道爲什麼你會想。

+0

nvm ...我用||這是或... 它的工作!非常感謝你C: 我確實按照你告訴我的條件,但似乎發生的唯一問題是,即使條件未滿足,它也會執行if(){}中的內容。 (hand1 [1] - hand1 [0] == 1 || hand1 [2] - hand1 [1] == 1 || hand1 [3] - hand1 [2] == 1 || hand1 [4] - hand1 [3] == 1) \t { \t \t printf(「Tienes una Corrida del%d%d!Felicidades \ n」,hand1 [0],hand1 [4]); \t} 打印它即使它不是齊平(1,2,3,4,5 ...等) – Seung 2014-10-30 18:18:18

+1

不是||(或)男人,是&&(和) – hidrargyro 2014-10-30 18:22:39

+0

請注意, for'循環和long'if'(使用'&&'使其工作)方法在這裏需要對手進行排序。如果不是,它不會檢測到它們。你可以做一個嵌套for循環(2級) – Baldrickk 2014-10-30 18:56:08

0

switch語句由兩部分組成:第一部分是您想要評估的內容,並且在語句的switch()部分的括號內。第二部分(或部分,真的)是第一部分將評估的常數。那些需要是靜態/常量值來檢查。因此,您不能使用像hand1 [1] -hand1 [0]這樣的表達式,它可以在程序執行期間進行更改。 但是,您可以使用if..else鏈,並可能完成您要查找的內容。