从内循环c ++内部突破外循环

时间:2014-10-27 11:44:28

标签: c++ loops break

(我知道有很多关于此问题的帖子,但是在连续搜索5分钟后我找不到使用C或C ++的帖子)

我想问一下如何在内循环内部突破外循环。

示例:

while(true){
    for(int i = 0; i < 2; i++){
    std::cout << "Say What?";
    //insert outer-loop break statement here
    }
}

以上只是一些伪代码。不要担心逻辑。

6 个答案:

答案 0 :(得分:7)

将循环放在一个函数中,然后从返回

void RunMyLoop (...)
{
    while (true)
    {
        for (int i = 0; i < 2; i++)
        {
            std::cout << "Say What?";
            if (SomethingHappened)
                return;
        }
    }
}

可以使用goto

while (bKeepGoing)
{
    for (int i = 0; i < 2; i++)
    {
        std::cout << "Say What?";
        if (EventOccured)
        {
            goto labelEndLoop;
        }
    }
}
labelEndLoop:
//...

你也可以使用布尔&#34;打破&#34;它

bool bKeepGoing = true;
while (bKeepGoing)
{
    for (int i = 0; i < 2; i++)
    {
        std::cout << "Say What?";
        if (EventOccured)
        {
            bKeepGoing = false;
            break;
        }
    }
}

答案 1 :(得分:3)

如果你不想用它来创建一个函数,这是一个选项:

bool ok = true;
while(ok){
    for(int i = 0; i < 2; i++)
    {
        std::cout << "Say What?";
        //insert outer-loop break statement here
        if(/*somthing here*/)
        {
            ok = false;
            break;
        }
    }
}

答案 2 :(得分:2)

可以使用goto。但我会这样做。

while(true){
    bool breakMe = false;
    for(int i = 0; i < 2; i++){
        std::cout << "Say What?";

        breakMe = true;
        break;
    }

    if ( breakMe )
        break;
}

答案 3 :(得分:2)

正如其他人使用函数或在C ++ 11中编写的那样,返回的lambda是最好的情况。但是如果你必须打破更多不同的嵌套循环,goto可能是最好的。

以下伪代码无法使用函数实现:

while (1) {
  // code
  while (1) {
    // code
    while (1) {
      // code
      if (cond1) 
        break one level;
      if (cond2) 
        break two level;
    }
  }
}

使用goto可以:

while (1) {
  // code
  while (1) {
    // code
    while (1) {
      // code
      if (cond1) 
        goto level_a; //break one level;
      if (cond2) 
        goto level_b; // break two level;
    }
    level_a:
  }
  level_b:
}

重要的是保持一致。最好是使用'algorithm'无原始循环

答案 4 :(得分:1)

Blacktempel给出了更好的方法但是如果你不想使用函数或goto那么试试这个:

int break_outer_loop = 0;
while(break_outer_loop == 0){
    for(int i = 0; i < 2; i++){
        std::cout << "Say What?";

        //insert outer-loop break statement here
        if(CONDITION FOR OUTER BREAK) {
            break_outer_loop = 1;
            break;
        }
    }
}

答案 5 :(得分:0)

你不能直接打破外环。尝试重构,以便您可以使用return,或设置条件,以便while循环自然结束。

bool bStop = false;

while(!bStop){
  for(int i = 0; i < 2; i++){
    std::cout << "Say What?";
    bStop = true;
    break; // ends inner loop
   }
}

void foo(){
  while(true){
    for(int i = 0; i < 2; i++){
      std::cout << "Say What?";
      return;
     }
   }
}