Пояснение к «Недоступному коду» внутри функции c ++ - PullRequest
4 голосов
/ 04 апреля 2019

Цель - написать функцию, которая ищет в массиве значение. Если массив содержит значение, вернуть индекс, в котором находится ключ. Если массив не содержит значения, вернуть -1

.

У меня есть функция c ++, которая возвращает индекс переменной массива. Мне нужно объяснение, почему моя часть моего кода (то есть «i ++» в выражении цикла for) помечена как «недоступная» моей IDE

Я попытался отладить код построчно, чтобы посмотреть, смогу ли я понять, почему i ++ недоступен. Я не могу определить, почему. Тем не менее, я подозреваю, что это может быть связано с моим «return» заявлением

int main()
{
    const int size = 4;
    int array[] = { 345, 75896, 2, 543 };
    int searchKey = 543;
    std::cout << "Found at: " << search(array, size, searchKey);
    return 0;
}

int search(int* array, int size, int searchkey)
{
    while (1) {

        std::cout << "Enter an Integer to search. Hit -1 to quit.\n";
        scanf("%d", &searchkey);

        if (searchkey == -1) {
            break;
        }

        for (int i = 0; i < size; i++) {
            if (array[i] == searchkey) {
                return 1;
            }
            else {
                return -1;
            }
        }
    }
}

Я ожидаю, что функция вернет индекс массива, если в массиве существует searchKey, но он всегда заканчивает тем, что возвращает '-1'

Ответы [ 2 ]

9 голосов
/ 04 апреля 2019

Цикл for не совсем правильный. Функция возвращает в первой итерации цикла независимо от значения первого элемента в массиве. Если первый элемент соответствует поисковому ключу, функция возвращает 1. Если нет, возвращает -1. Он никогда не касается второго элемента в массиве.

Вам необходимо удалить часть else. Возвращайте -1 только после окончания цикла.

for(int i=0; i<size; i++){
    if(array[i] == searchkey){
        // Key was found. Return the index.
        return i;
    }
}

// Key was not found.
return -1;
6 голосов
/ 04 апреля 2019

Ваша логика в коде решает вернуть 1 или -1 в самый первый цикл for, поэтому он никогда не коснется i ++.

Вы должны возвращать -1 только после окончания цикла (когда поиск завершен)

for(int i=0; i<size; i++){
        if(array[i] == searchkey){
            // return the INDEX of array when found immediately 
            return i;
        }
    }
return -1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...