2015-11-20 56 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;