如何在c++中使用带开关的数组

How to use an array with switch in c++?

本文关键字:开关 数组 c++      更新时间:2023-10-16

所以我的问题是,我试图在hand1[o](从第一个牌数组[]中随机抽取5个数字)之后获得数组。进入开关,以检测是否为刷新。例如,如果hand1[1]-hand1[0]的开关=1;hand1[2]-hand[1]=1…等等printf("从1~5"开始冲洗")。

然而,tbh,我甚至不确定在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("nn");
 }
 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("nn");
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("nn");
 }
 void corrida()
 {
switch (hand1)
{
case (hand1[1] - hand1[0] = 1) :
}
 }

您没有正确使用switch

switch语句的思想是采用一个可能具有多个值的表达式,然后对每种可能性执行不同的操作。在C++中,只允许切换基本上是整数的东西:intchar类型1,而不是字符串(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}将不会被检测为冲洗,即使它显然是冲洗。有一些方法可以修改算法,使其在不进行排序的情况下工作。


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

switch语句由两部分组成:第一部分是要计算的内容,位于语句switch()部分的括号中。第二部分(实际上是一个或多个部分)是将根据第一部分进行评估的常量。这些值必须是要检查的静态/常数值。因此,不能使用像hand1[1]-hand1[0]这样的表达式,因为它在程序执行过程中会发生变化。然而,你可以使用if.else链,并可能完成你想要的。