错误:break语句不在循环或开关内

时间:2017-01-02 08:56:01

标签: c++ switch-statement

我写了这部分代码,并显示了一系列错误。上面提到的错误是第一个。代码有什么问题?

void direction(char ch)
{

switch(ch)
case 'w': if(dirn!=3){dirn=1;}
          break;

case 'a': if(dirn!=2){dirn=4;}
          break;

case 's': if(dirn!=1){dirn=3;}
          break;

case 'd': if(dirn!=4){dirn=2;}
          break;

3 个答案:

答案 0 :(得分:1)

只有在交换机块中只有一个案例时,您才可以选择省略switch语句的开括号和右括号:

void direction(char ch)
{
    switch(ch)
    case 'w': if(dirn!=3){dirn=1;}
}

但是,如果你有多个案例需要处理,那么你必须将它们包含在一对开始和结束括号中,以便为switch语句创建一个代码块,如下所示:

void direction(char ch)
{

switch(ch)
{//opening brace for starting of statement block
    case 'w': if(dirn!=3){dirn=1;}
          break;

    case 'a': if(dirn!=2){dirn=4;}
          break;

    case 's': if(dirn!=1){dirn=3;}
          break;

case 'd': if(dirn!=4){dirn=2;}
          break;
}//closing brace for closing of statement block

所以你必须删除所有的情况,但是一个OR添加一对大括号来创建语句块。在所有其他情况下,您的代码无法成功编译。

答案 1 :(得分:0)

switch语句需要大括号块,其中包括默认值的所有标签应为:

switch(ch)
{
case 'w': if(dirn!=3) dirn=1;
          break;

case 'a': if(dirn!=2) dirn=4;
          break;

case 's': if(dirn!=1) dirn=3;
          break;

case 'd': if(dirn!=4) dirn=2;
          break;
default:
          break;
}

switch之后的语句必须是复合语句才能包含case,default和break。 Break在这里有一个特殊的含义,与循环不同。如果在switch之后只有下一行省略了括号,那么它就是其语句的一部分。

答案 2 :(得分:0)

你忘记了开关支架:

void direction(char ch)
{

    switch(ch)
    {
        case 'w': if(dirn!=3){dirn=1;}
            break;

        case 'a': if(dirn!=2){dirn=4;}
            break;

        case 's': if(dirn!=1){dirn=3;}
            break;

        case 'd': if(dirn!=4){dirn=2;}
            break;
    }
}