2017-01-02 1506 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 

所以,你將不得不刪除所有的情況,但一個或添加一對大括號來創建語句塊。在所有其他情況下,您的代碼將無法成功編譯。