无法弄清楚我的切换语法中出了什么问题

时间:2014-05-12 14:28:01

标签: c switch-statement syntax-error

好的,我的切换语法有问题,我不知道为什么我无法编译它。

我发布了错误的部分代码,以便您可以帮助我。

如果您需要有关代码的任何信息,请问我。

for (c=0; c<3; c++) // 3 jogadores ( 4 - voce )
{
    switch(c)
    {
        case 0:
            char cartas[7];
            cartas[0] = jog2_carta1[0];
            cartas[1] = jog2_carta1[1];
            cartas[2] = jog2_carta2[0];
            cartas[3] = jog2_carta2[1];
            cartas[4] = jog2_carta3[0];
            cartas[5] = jog2_carta3[1];
            cartas[6] = '\0';

            if (strcmp(retornaMaior(cartas,mesa_jog1[0]), "00") == 1)
            {
               printf("%s", retornaMaior(cartas,mesa_jog1[0]));
               maiorRodada = 2;
               // remove carta (na funcao)
            }
            else
            {
                // remove menor
            }
            break;
        case 1: // jogador 3
            char cartas[7];
            cartas[0] = jog3_carta1[0];
            cartas[1] = jog3_carta1[1];
            cartas[2] = jog3_carta2[0];
            cartas[3] = jog3_carta2[1];
            cartas[4] = jog3_carta3[0];
            cartas[5] = jog3_carta3[1];
            cartas[6] = '\0';

            if (strcmp(retornaMaior(cartas,mesa_jog2[0]), "00") == 1)
            {
                if (maiorRodada == 2)
                {
                    printf("%s", retornaMaior(cartas,mesa_jog2[0]));
                    maiorRodada = 3;
                    // remove carta (na funcao)
                }           
            }
            else
            {
                // remove menor
            }
            break;
        case 2: // jogador 4
            break;
    }
}

2 个答案:

答案 0 :(得分:3)

您可能希望为每个case语句打开一个新的上下文,如下所示:

switch(c)
{
  case 0:
  {
     /* Put variable definitons here. */
  }
  case 1:
  {
  }
  ...
  default:
  {
  }
}

答案 1 :(得分:3)

首先,如果您询问语法错误,请始终向我们显示确切的错误消息,并清楚地指出它所引用的行。

问题是带有案例标签的语句的语法是:

case 常量表达式 : 声明

你有:

case 0:
    char cartas[7];
    cartas[0] = jog2_carta1[0];
    // ...

char cartas[7];声明,而不是声明

你可以通过用大括号括起每个case的主体来解决这个问题,使整个代码块(包括主要声明)成为一个语句:

case 0:
    {
        char cartas[7];
        cartas[0] = jog2_carta1[0];
        // ...
        break;
    }