2017-01-02 1505 views
0

我写了这部分代码并显示一系列错误。上面提到的错误是第一个。代码中有什么错误?错误:break语句不在循环或开关中

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; 
+0

请填写您的代码 – csblo

+1

缺少大括号? – csblo

+0

只是一句忠告。如果你只有一行代码作为if语句的一部分被执行,那么就避免使用这些大括号。 'if(dirn!= 3){dirn = 1;}'实际上应该写为'if(dirn!= 3)dirn = 1;'。这些大括号不必要地混淆了你的代码。如果你有多个语句作为if语句的一部分执行,那么当然这些括号是必需的。 – RBT

回答

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; 
} 

开关后的语句必须是复合语句遏制的情况下,违约,并打破。这里的休息有一个特殊的含义,与循环不同。如果在开关之后的下一行中省略了括号,那么它就是其声明的一部分

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; 
    } 
} 
1

您可以选择忽略的,只有当你有你的开关块只有一个case的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 

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