C ++函数中“无法访问的代码”的说明

Oke*_*Oke 4 c++ arrays function

目的是编写一个在数组中搜索值的函数。如果数组包含该值,则返回键所在的索引;如果数组不包含该值,则返回-1

我有一个C ++函数,它返回数组变量的索引。我需要解释为什么我的我的部分代码(即for循环表达式中的“ i ++”)被我的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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望函数在数组中存在searchKey的情况下返回数组的索引,但是它总是返回“ -1”

R S*_*ahu 9

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;
Run Code Online (Sandbox Code Playgroud)


小智 6

您的代码逻辑决定在for循环中第一次返回1或-1,因此它永远不会碰到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;
Run Code Online (Sandbox Code Playgroud)