2015-10-02 5 views
-3

Этот код работает, за исключением возврата false в конце. Почему он не возвращает ложных должным образом?Ошибка возврата двоичного файла

Я знаю, что это так, потому что код является частью большей программы и должен сказать, что «стрелка не найдена» при возврате false. Однако я не вижу этого сообщения.

/** 
* Returns true if value is in array of n values, else false. 
*/ 
int lower = 0; 

bool search(int value, int values[], int n) { 
    int higher = n; 

    if (n < 0) { 
     return false; 
    } 

    while (lower <= higher) { 
     int middle = (lower + higher)/2; 
     if (values[middle] == value) { 
      return true; 
     } else if (values[middle] < value) { 
      lower = middle + 1; 
     } else if (values[middle] > value) { 
      lower = middle - 1; 
     } 
    } 
    return false; 
} 
+2

Что такое содержимое 'values'? Он * сортируется? Каковы значения 'value' и' n'? Вы пробовали переходить через код по строкам в отладчике? И почему 'lower' является глобальной переменной? –

+2

Я не Джон Скит, но мне кажется, что вы никогда не перебалансируете свое 'высшее значение', а вместо этого передвигаетесь только« ниже ». Вы прошли через этот код, чтобы узнать, что он на самом деле делает? –

+0

@TimBiegeleisen: Это похоже на ответ. –

ответ

2

У вас есть логическая ошибка.

else if(values[middle]>value) 
    { 
    lower=middle-1; 
    } 

должно быть:

else if(values[middle]>value) 
    { 
    higher=middle-1; 
    } 

еще лучше, вы можете просто использовать:

else 
    { 
    higher=middle-1; 
    } 

С if и else-if до этого заботиться о двух других случаях.

+0

Я так благодарен вам –

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