Цель состоит в том, чтобы написать функцию, которая ищет значение в массиве. Если массив содержит значение, вернуть индекс, в котором находится ключ. Если массив не содержит значения, вернуть -1
У меня есть функция С++, которая возвращает индекс переменной массива. Мне нужно объяснение, почему моя часть моего кода (т.е. "i++" в выражении цикла for) помечена моей IDE как "недостижимая"
Я попытался отладить код построчно, чтобы понять, могу ли я расшифровать, почему i++ недоступен. Я не могу определить, почему. Однако я подозреваю, что это может быть связано с моим заявлением «возврат».
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»
Подумайте о цикле for. Будет ли он повторяться более одного раза? Если array[0] == searchkey вы возвращаете 1, иначе вы возвращаете -1. Поскольку оба случая этой первой итерации приводят к возврату, вы никогда не будете увеличивать i.
Если вы будете обрабатывать все взаимодействия с пользователем в main, вы сможете выполнять поиск более одного раза.
Итак, ваша IDE намекнула вам на ошибку в вашем коде, разве это не круто?





Петля 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;
Ваша логика в коде решает вернуть 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;
«поиск» никогда не возвращает индекс, он возвращает 1 или -1. А i++ недоступен, потому что функция возвращается после первой итерации.