1

次のようなコードがあるとします。

if(condition1 || condition2 || condition 3 || condition4)
{
// this inner part will be executed if one of the conditions is true.
// Now I want to know by which condition this part is executed.
}
4

6 に答える 6

5

これを行うにはもっと良い方法があると確信しています。

int i = 0;
auto check = [&i](bool b)->bool
{
    if (!b) ++i;
    return b;
};

if (check(false) || // 0
    check(false) || // 1
    check(true)  || // 2
    check(false))   // 3
{
    std::cout << i; // prints 2
}
于 2013-08-29T11:14:48.847 に答える
2

|| は短絡評価であるため、次のようなコードを使用できます。

if(condition1 || condition2 || condition 3 || condition4)
{
    if (condition1 ) 
    {
            //it must be condition1 which make the overall result true
    }
    else if (condition2)
    {
            //it must be condition2 which make the overall result true
    }
    else if (condition3)
    {
            //it must be condition3 which make the overall result true
    }
    else
    {
            //it must be condition4 which make the overall result true
    }

    // this inner part will executed if one of the condition true. Now I want to know by which condition this part is executed.
}
else
{

}
于 2013-08-29T11:42:08.417 に答える
0

a なしでは、andステートメントswitchのみを使用できます。orif

if(condition1 || condition2 || condition 3 || condition4) {
  // this inner part will executed if one of the condition true. 
  //Now I want to know by which condition this part is executed.
  if ( condition1 || condition2 ) { 
    if ( condition1 ) 
       printf("Loop caused by 1");
    else 
       printf("Loop caused by 2");
  else 
    if ( condition3) 
       printf("Loop caused by 3");
    else
       printf("Loop caused by 4");
}

これが今まで見た中で最も効率的かどうかはわかりませんが、4 つの条件のどれがif ...ブロックに入ったのかを特定します。

于 2013-08-29T11:11:45.183 に答える
0

プログラム上の理由で知る必要がある場合、つまり、どの条件が真であるかに応じて異なるコードを実行する場合は、次のようにすることができます

if (condition1)
{
    ...
}
else if (condition2)
{
    ...
}
else if (condition3)
{
    ...
}
else if (condition4)
{
    ...
}
else
{
    ...
}

デバッグの理由だけで知りたい場合は、印刷してください。

于 2013-08-29T11:14:47.823 に答える