【问题标题】:C++ Try Catch inside loopC++ 尝试 Catch 内循环
【发布时间】:2012-08-31 21:56:57
【问题描述】:

我有这个具有以下一般结构的 C++ 程序

1st while (condition A == true)
  //some code for 1st loop

  2nd while (condition B == true)
    //some code for 2nd loop
    try
      //some code for try
    catch
      //condition B == false (supposed to leave 2nd loop and go back to first loop)

我希望它在出现异常时退出第二个循环并返回到第一个循环,直到条件 B 再次星期二。如上所述,它不像我预期的那样工作。似乎正在发生的事情是代码卡在catch 中并且永远不会离开它。

如何安排它以使其按需要工作?

注意:条件 A 永远不会为假。

【问题讨论】:

  • 当你说condition B == false时,你的意思是你在catch里面将条件B设置为false?

标签: c++ while-loop try-catch control-flow


【解决方案1】:

在 catch 中添加 break 关键字

还要注意你有 b == false; 那就是检查 b 是否等于 false,而不是设置 b = false。

【讨论】:

  • 谢谢!事实上,我在 catch 内(这里和代码本身)犯了一个双重错误 condition == B。也感谢您指出这一点。这个节目我需要阅读有关休息并再次继续的信息。我正在尝试继续,但甚至没有考虑过中断(认为它会完全停止程序执行)。
  • break 将跳出当前的 for 循环。很高兴能提供帮助。
【解决方案2】:
bool flag1 = true, flag2 = true;
while (flag1)
{
  // some work so that flag2 == true
  while (flag2)
  {
    try
    {

    }
    catch (...) // any exception happens
    {
        break;
    }
  }
}

【讨论】:

    【解决方案3】:
    1st while (condition A == true) 
      //some code for 1st loop 
    
      2nd while (condition B == true) 
        //some code for 2nd loop 
        try 
          //some code for try 
        catch 
        {
          //condition B == false (supposed to leave 2nd loop and go back to first loop) 
          break ;
        }
    

    注意:即使在示例中,也请不要使用 condition A == true 之类的东西。最好使用while (condition A)

    【讨论】:

    • 我想我会不同意这里。我认为包含 ==true 是完全可以的。它使它更明确,有时更具可读性。这只是编码约定和样式的问题。就个人而言,我不包括他们,但我不介意从其他人那里看到他们。
    • 没问题。不过,我并没有遵循我的风格,而是遵循编码大师在大学里教我的东西。我只是传递这些知识。
    【解决方案4】:

    你可以在 catch 块中调用 break 来逃避第二个循环:

    void foo(void) {
        bool A(true);
        while (A) {
            bool B(doSomething());
            while (B) {
                try {
                    B = doSomethingElseThatMayThrow();
                } catch (...) {
                    break;
                }
            }
         }
    }
    

    或者,您可以将第二个循环放在 try 块中:

    void foo(void) {
        bool A(true);
        while (A) {
            bool B(doSomething());
            try { 
                while (B) {
                    B = doSomethingElseThatMayThrow();
                }
            } catch (...) {}
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2010-09-13
      • 2013-11-10
      • 2013-05-27
      • 2010-11-23
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多