2015-11-20 93 views
3

我有這樣基本編程

for(..;..;..) 
{ 
    if(true) 
    { 

    } 
    //statements 

} 

的結構我想寫裏面除了是否轉到聲明只會發外控制,如果和執行,我已經打上語句。

+0

你必須多解釋一下。你是否只需要爲迭代,巢迭代或所有後續迭代? – Haris

+0

不會破,因爲在破解的情況下破解控制會完全脫離for循環 –

+0

舉一個更詳細的例子.. – Haris

回答

4

處理這種情況的一種常見方法是將if語句的主體放入一個單獨的函數中,然後如果由於某種原因導致函數無法完成,則從函數中間返回。函數返回後,for循環中的其餘語句將運行。

void foo(void) 
{ 
    //statements 
    //statements 

    if (something_bad_happened) 
     return; 

    //statements 
    //statements 

    if (some_other_bad_thing_happened) 
     return; 

    //statements 
    //statements 
} 

void bar(void) 
{ 
    for(..;..;..) 
    { 
     if (some_foo_is_needed) 
      foo(); 

     //statements 
     //statements 
    } 
} 
2

你可以把你如果假人do..while循環像這裏面:

for(..;..;..) 
{ 
    do 
    { 
     if() 
     { 
      //use break somewhere here according to your logic 
     } 
    }while(false); 

    //statements 
} 

這將導致break只跳過內部do..while循環。

條件是falsedo..while,因此循環只運行一次,正如預期的情況下一樣。該循環僅用於允許中間的break

2

而不是if,使用switch語句。任何時候你都可以跳開關。這不是一個非常實用的解決方案...但它的工作原理。

for(..;..;..) 
{ 
    switch(boolean_expression) { //break just leaves this switch statement 
    case 0: //false is 0 

     break; 
    default: //true is not zero 
     //statements 
     if(something) 
      break; 
     //statements you want to skip 
     break; 
    } 
    //statements 
} 
1

如果我理解你的問題,你想要寫一個聲明中if轉到你明顯的語句只有當條件爲真,那麼goto聲明可能是有用的,舉例來說如果//statements只需要如果條件爲真要運行:

for(..;..;..) 
{ 
    if(true) 
    { 
     goto dothis; 
    } 
    /* other statements */ 
    return A; 

    dothis:; 
    //statements 

    return B; 
} 

//statements不必在for循環與goto,例如:

for(..;..;..) 
{ 
    if(true) 
    { 
     goto dothis; 
    } 
    /* other statements */ 
} 
return A; 

dothis:; 
//statements 

return B;