【问题标题】:C++: How to decide the loop to continue to? [closed]C++:如何决定循环继续? [关闭]
【发布时间】:2014-12-26 09:59:06
【问题描述】:

我有嵌套的 do-while、while 和 for 循环。

有没有办法决定“继续”到哪个循环?各种解决方案都会很棒(不仅仅是 goto..)谢谢!

while (foo==true) // loop1
{

   do
   {
      for(int i=0; i<someNumber ; i++) // loop3
      {

         if( soo==1)
         {
             <CONTINUE_TO_LOOP1>
         }
         else if( soo==2 )
         {
             <CONTINUE_TO_LOOP2>
         }
         else if( soo==3 )
         {
             <CONTINUE_TO_LOOP3>
         }

      }

   } while (moo==true) //loop2    

}

【问题讨论】:

  • continue; 也许?
  • continue 只会将您带到父循环。意思是“loop3”。
  • 尽可能避免嵌套控制结构。
  • 解决方案二:重做逻辑
  • @Jessica break 你会放到下一个外循环。在那里你可能需要另一个条件来再次决定break,或者continue

标签: c++ loops for-loop while-loop goto


【解决方案1】:

也许你可以解决这个问题。

while (foo==true) // loop1
{

   do
   {
      for(int i=0; i<someNumber ; i++) // loop3
      {

         if( soo==1)
         {
              break;//<CONTINUE_TO_LOOP1>
         }
         else if( soo==2 )
         {
             break;//<CONTINUE_TO_LOOP2>
         }
         else if( soo==3 )
         {
            continue;//<CONTINUE_TO_LOOP3>
         }
      }
      if( soo==1)
      {
         break;//<CONTINUE_TO_LOOP1>
      }
      else if( soo==2 )
      {
          continue;//<CONTINUE_TO_LOOP2>
      }
   } while (moo==true) //loop2    
   if( soo==1)
   {
       continue;//<CONTINUE_TO_LOOP1>
   } 
}

【讨论】:

  • 我可以知道它被否决的原因吗?这个解决方案肯定会奏效,我已经提到了它的解决方法。
【解决方案2】:

经过一些重组,并且没有 goto:

bool loop3()
{
    for (int i=0; i < someNumber ; i++) {
        if(soo == 1) {
            return false;
        } else if(soo == 2) {
            return true;
        } else if(soo == 3) {
            continue;
        }
    }
    return true;
}

循环变成:

while (foo == true) // loop1
{
   do
   {
       if (loop3() == false) {
           break;
       }
   } while (moo == true) //loop2    
}

【讨论】:

    【解决方案3】:

    我提倡表达标签的无条件分支。其他解决方案将花费额外的条件分支和可能的状态变量,灵活性较差,可读性也较差。

    【讨论】:

    • 我也提倡“Go To Statement被认为是有害的”被认为是有害的”。
    【解决方案4】:

    CONTINUE_TO_LOOP3 简单:continue

    CONTINUE_TO_LOOP2 简单:break

    CONTINUE_TO_LOOP1 这是有趣的一个:

    • 如果不使用四个字母的单词就无法一步完成goto
    • 或在 loop2 周围放置一个 try-catch 并使用 raise 退出。
    • 或假设循环 1 的结尾和循环 2 的结尾之间没有代码: moo = false ; break ;

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2018-07-15
    相关资源
    最近更新 更多