2015-09-01 5 views
-8

Иногда визуальный C++ игнорирует условие if и никогда не входит в него! В режиме отладки я вижу, что значение условного выражения истинно, но C++ игнорирует его!C++ игнорирует, если оператор

так:

if (childrens.at(j)->rules.size() > tempMax) { 
    tempMax = childrens.at(j)->rules.size(); 
} 

работает правильно, когда я изменить его к этому:

tempInt = childrens.at(j)->rules.size(); 
if (tempInt > tempMax) { 
    tempMax = tempInt; 
} 

Почему, и что такое исправление?

+0

попытайтесь закрыть оптимизацию. возможно, помогает – ataman

+0

, возможно, это проблема типа. Существуют ли типы 'tempInt',' tempMax' и 'size()' все равно? – cambunctious

+2

@ataman Как это могло бы помочь? – juanchopanza

ответ

0

Добавьте это еще в ваш, если:

if (childrens.at(j)->rules.size() > tempMax) { 
    tempMax = childrens.at(j)->rules.size(); 
}else{ 
    string inputCheck; 
    cout<<"children."<<j<<".rules."<<childrens.at(j)->rules.size()<<" > "<<tempMax; 
    cout<<"\nMy if - statement isn't working (Press Enter/Return to continue): "; 
    cin.ignore(256,'\n'); 
    getline(cin,inputCheck); 
} 

И посмотреть, что у вас есть.

0

@ user4581301 описание проблемы, я проверил, и он прав.

в этом коде

if (childrens.at(j)->rules.size() > tempMax) { 
tempMax = childrens.at(j)->rules.size(); 

}

rule.size() возвращают без знака и температуры tempMax является ИНТ, что это начальное значение INT_MIN, оптимизатор игнорировать это, потому что без знака междунар всегда больше, чем отрицательный, но после входа, если тело tempMax стало положительным, и я не знаю, почему оптимизатор его игнорирует!

Я пишу эту новую программу

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    vector<bool> a; 

    for (size_t i = 0; i < 20; i++) 
    { 
     a.push_back(true); 
    } 

    int tempMax = INT_MIN; 

    for (size_t i = 0; i < a.size(); i++) 
    { 
     if (a.size() > tempMax) 
     { 
      tempMax = a.size(); 
     } 
    } 

    cout << tempMax << endl; 
    return 0; 
} 

и выход -2147483648

и после изменения типа a.size() к (межд) a.size() это исправлено:

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    vector<bool> a; 

    for (size_t i = 0; i < 20; i++) 
    { 
     a.push_back(true); 
    } 

    int tempMax = INT_MIN; 

    for (size_t i = 0; i < a.size(); i++) 
    { 
     if ((int)a.size() > tempMax) 
     { 
      tempMax = a.size(); 
     } 
    } 

    cout << tempMax << endl; 

    return 0; 
} 
+0

Также стоит подумать о 'size_t tempMax = 0;' и избавиться от приведения. Если вам не нужна уловка, чтобы вообще не иметь векторов, никогда не будет меньше 0 элементов. – user4581301

Смежные вопросы