4

私はこの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)

例外が発生したときに2番目のループから抜け出し、条件Bが再び火になるまで1番目のループに戻るようにします。上記のように、私が期待するようには機能しません。起こっているように見えるのは、コードがスタックしcatch、決して離れないということです。

必要に応じて機能させるにはどうすればよいですか?

注:条件Aが偽になることはありません。

4

4 に答える 4

7

キャッチにbreakキーワードを追加します

また、b==falseがあることに注意してください。これは、b = falseを設定するのではなく、bがfalseに等しいことを確認することです。

于 2012-08-31T21:59:57.280 に答える
2
bool flag1 = true, flag2 = true;
while (flag1)
{
  // some work so that flag2 == true
  while (flag2)
  {
    try
    {

    }
    catch (...) // any exception happens
    {
        break;
    }
  }
}
于 2012-08-31T22:04:05.653 に答える
0
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)

于 2012-08-31T22:06:44.097 に答える
0

catchブロック内でbreakを呼び出して、2番目のループをエスケープできます。

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

または、2番目のループをtryブロック内に配置することもできます。

void foo(void) {
    bool A(true);
    while (A) {
        bool B(doSomething());
        try { 
            while (B) {
                B = doSomethingElseThatMayThrow();
            }
        } catch (...) {}
    }
}
于 2012-08-31T22:34:30.010 に答える