C ++ оператор if продолжает выполнять if, а не код под else - PullRequest
0 голосов
/ 01 марта 2012

У меня есть оператор 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 ]

7 голосов
/ 01 марта 2012
if(order[i1] == "D" || "W" || "O" || "P")

проверяет order[i1] == "D" на правду. Если это не так, тогда проверяется "W" на правду. Это всегда так, и поэтому компилятор может решить, что этот тест всегда оценивается как true.

Что вы на самом деле имеете в виду, это

if(order[i1] == "D" || order[i1] == "W" || order[i1] == "O" || order[i1] == "P")
4 голосов
/ 01 марта 2012

Когда вы говорите:

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

Вы, вероятно, имеете в виду:

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

"W", распад на ненулевой указатель преобразуется в true при преобразовании в bool.

3 голосов
/ 01 марта 2012

эта проверка не пройдена:

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

Это всегда так.В C ++, если вы хотите сравнить со многими значениями, которые вам нравятся:

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

Ваша проверка всегда будет истинной, потому что вторая проверка - это просто "W", которое является char [], значением,не 0, что означает, что это всегда верно.

3 голосов
/ 01 марта 2012

Я думаю, вы имели в виду это:

if ( (order[i1] == "D") || 
     (order[i1] == "W") || 
     (order[i1] == "O") || 
     (order[i1] == "P") )
{
    // code...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...