C ++ if else语句继续执行if而不是else下的代码

时间:2012-03-01 16:14:02

标签: c++ if-statement

我有一个if else语句,但似乎是在if下执行代码,它应该执行else下的代码,但我看不出我的代码在下面的原因。

如果你查看最后一个if语句,它会检查是否显示这些字符,如果你注意到0 - 3 D,W,O,P不在单元格0 - 3中,但它仍然在那里执行print语句谁能告诉我为什么?

会很乐意提供任何帮助

        order.push_back("V"); //V
            order.push_back("I");//F
            order.push_back("F");//I
            order.push_back("N");//O
            order.push_back("D");//O
            order.push_back("W");//O
            order.push_back("O");//O
            order.push_back("P");//O
            order.push_back("Y");//O
            order.push_back("C");//O
            order.push_back("L");//O
            order.push_back("E");//O
            order.push_back("R");//O
            order.push_back("X");//O

                if(order.front() == "V")
                {
                     it = find(order.begin(), order.end(), "I");
                     ++it;
                     std::string o = *it;
                     DCS_LOG_DEBUG("NEXT 0 " << o);
                     DCS_LOG_DEBUG("NEXT " << *it);


                     int i = find(order.begin(), order.end(), "N") - order.begin();
                     int pos = i;

                     DCS_LOG_DEBUG("POS " << pos);

                     for(int i1 = 0; i1 < pos; i1++)
                     {
                         DCS_LOG_DEBUG("IN LINE " << order[i1]);

                         if(order[i1] == "D" || "W" || "O" || "P")
                         {
                             DCS_LOG_DEBUG("It matches one of the above incorrect");
                         }
                         else
                         {
                             for(pos; pos < order.size(); pos++)
                             {

                                 DCS_LOG_DEBUG("FOUND AFTER POS INDEX " << order[pos]);
                                 }
                       }

4 个答案:

答案 0 :(得分:7)

if(order[i1] == "D" || "W" || "O" || "P")

检查order[i1] == "D"是否真实。如果不是这样,那么检查"W"是否真实。这总是正确的,因此编译器可能会发现该测试总是评估为真。

你真正的意思是

if(order[i1] == "D" || order[i1] == "W" || order[i1] == "O" || order[i1] == "P")

答案 1 :(得分:4)

当你说:

if(order[i1] == "D" || "W" || "O" || "P")
你可能意味着:

if(order[i1] == "D" || order[i1] == "W" || order[i1] == "O" || order[i1] == "P")

"W",当转换为true时,衰减为非空指针会转换为bool

答案 2 :(得分:3)

我认为你的意思是:

if ( (order[i1] == "D") || 
     (order[i1] == "W") || 
     (order[i1] == "O") || 
     (order[i1] == "P") )
{
    // code...
}

答案 3 :(得分:3)

此检查已被破坏:

if(order[i1] == "D" || "W" || "O" || "P")

总是如此。在c ++中,如果你想与你喜欢的许多值进行比较:

if(order[i1] == "D" || order[i1] == "W" || order[i1] == "O" || order[i1] == "P")

您的检查将始终为真,因为第二次检查只是“W”,这是一个char [],值,而不是0,这意味着它始终为真。