C++ Try Catch inside loop

拟墨画扇 提交于 2019-12-13 12:30:08

问题


I have this C++ program with the following general structure

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)

I want it to get out of 2nd loop when there's an exception and go back to 1st loop until condition B is tue again. As described above it doesn't work as I expect. What seems to be happening is that code gets stuck in catch and never leaves it.

How can I arrange it to make it work as I need?

Note: condition A is never false.


回答1:


add the break keyword to the catch

Also notice that you have b == false; That is checking that b is equal to false, not setting b = false.




回答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 ;
    }

Notice: Please do not use, even in examples, things like condition A == true. It is better to use while (condition A).




回答4:


You can call break within the catch block to escape the second loop:

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

Alternatively, you could place the second loop inside the try block:

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


来源:https://stackoverflow.com/questions/12222947/c-try-catch-inside-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!