2014-02-12 138 views
1

這不是我實際上想要實現的一個具體問題,但是對我而言,我不知道該怎麼做,所以我給出一個簡單的例子來說明:打開外殼打開外殼?

假設我們有一個含while環路switch語句,比如:

while(some_cond){ 
    switch(some_var){ 
     case 1: 
      foo(); 
      break; 
     case 2: 
      bar(); 
      break; 
    } 
} 

我們會怎樣做,如果我們想breakcase 1 while循環的,說什麼?

我們不能做break; break;,因爲第二個永遠不會發生。

我們也不能在while循環中有條件地執行break * un *,因爲這會發生在任何case中。

我們有在while循環無奈地if (some_var == 1) break;,否則追加&& !flag)while條件,並設置flag = 1

+0

'goto'會工作,雖然不夠漂亮。 – herohuyongtao

+0

你在用什麼語言? – csmckelvey

+0

對不起@Takendarkk,C++,補充。 – OJFord

回答

0

您可以使用goto(儘管如此,請勿使用goto)。

while (...) { 
    switch(...) { 
    case ...: 
     goto exit_loop; 

    } 
} 
exit_loop: ; 
+1

哦,哇,甚至不知道'goto'存在。謝謝。 – OJFord

+0

在*很多地方你會被送入監獄,你不會通過* Go *,如果你使用goto,你將不會收到200美元。 –

+0

@AlexandreVaillancourt只要我不'goto'狂野。 :) – herohuyongtao

-1
while(1){ 
switch(some_var){ 
    case 1: 
     foo(); 
     continue 2; 
    case 2: 
     bar(); 
     break; 
} 
} 

繼續2將讓你出去,從2級封閉循環

+1

不在C++中,或者至少不是標準的。這是一個PHP功能。 –

0

各種選項,在tastefulness的大致順序:

  • 移動循環到一個單獨的功能。使用return停止循環。
  • while(1)替換爲while(looping)並設置爲false來停止循環。如果您需要跳過當前迭代的其餘部分,請使用continue。使用goto跳過循環的末尾。 How bad can it be?
  • 使用try塊環繞環路,並使用throw來停止環路。
0

讓你同時使用在循環中修改的變量。

bool shoulEnterLoop = true; 
while(shoulEnterLoop){ 
    switch(some_var){ 
    case 1: 
     if (!foo()) 
     shoulEnterLoop = false; 
     break; 
    case 2: 
     bar(); 
     break; 
    } 
}