Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        5年前关闭。
                                                                                            
                
        
所以我的问题是我试图获得在hand1 [o]之后得到的数组(从第一个纸牌数组[]中随机抽取5个数字。为了检测是否为同花顺,进入了一个开关。
例如,如果hand1 [1]的开关-hand1 [0] = 1; hand1 [2]-hand [1] = 1 ...等等
               printf(“从1到5刷新”)。

但是,我什至不知道在switch()或void corrida()的括号内放什么。
我尝试放置hand1 []或hand1 [],但它表示hand1不是恒定值。

附言我知道有些东西是西班牙语的(因为这是西班牙语课)

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) :

}
 }

最佳答案

您没有正确使用switch

switch语句的想法是采用一个可以具有多个值的表达式,然后对每种可能性执行不同的操作。在C ++中,只允许您打开基本上是整数的内容:intchar types1,而不是在此处尝试进行操作的字符串(数组(Java将允许您这样做))。

但是,switch不适合在这里使用,因为您有兴趣同时比较多个表达式的值。使用带有多个表达式的if结构会更好。就像是:

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


您还可以通过使用简短的“ flush-finding”算法来使其更加可读,如下所示:

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}显然是同花,也不会被检测为同花。有一些方法可以修改算法以使其工作而无需排序。



1我相信您也可以打开bool,但是我不知道为什么要这么做。

关于c++ - 如何在C++中使用带有switch的数组? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26660077/

10-12 19:10