C ++ возвращает логическое значение как 95 - PullRequest
0 голосов
/ 17 июня 2011

Проблема с возвратом логических значений в c ++ ..

bool find( const TrieNode &node, const string word )
{

    if (word.length() == 0)
    {
         if (node.isWord)
         {
         cout << "TRUE" << endl;
         return true;
         }

         else
         {
         cout << "FALSE" << endl;
         return false;
         }
    }

    char firstletter = word.at(0);
    int index = firstletter - 'a';

    if (node.letters[index] == NULL)
    {
    return false;
    }

    else
    {
    find (*node.letters[index],word.substr(1,(word.length() - 1)));
    }

}

в моем основном

cout << find(*mynode,"word") << endl;

приведет к:

FALSE

95

ясно, cout FALSE означает, что функция возвращает false. Однако, когда я распечатываю результат функции, я получаю 95, что оценивается как true .. Любая причина, почему это может быть сделаноэто?

спасибо

Ответы [ 2 ]

6 голосов
/ 17 июня 2011

Вы пропустили окончательный оператор возврата, поэтому вы получаете все, что находится в младшем байте EAX, что является случайным мусором. вы, вероятно, хотите return true; в самом конце вашей функции.

Вы должны прокачать уровень предупреждения вашего компилятора так, как он должен вам это сказать (что-то вроде «не все пути управления возвращают значение»).

5 голосов
/ 17 июня 2011

Проблема с вашим последним if утверждением:

if (node.letters[index] == NULL) {
    return false;
}
else {
    //if execution gets here, the return value of the function is undefined
    find (*node.letters[index],word.substr(1,(word.length() - 1)));
}

... возможно, попробуйте:

if (node.letters[index] == NULL) {
    return false;
}
else {
    return find (*node.letters[index],word.substr(1,(word.length() - 1)));
}
...