关于函数中流量控制的警告

Warning about flow control in the function

我创建了一个函数来检查数组中的负数,然后 return 值;它以 int testArray[] 作为第一个参数,以 int n=14 作为数组大小。我使用 for 循环遍历数组。我正在使用 if 语句来比较 testArray[i]<0 并且我有一个 else 语句来打印一条消息,指出没有找到负数。代码编译没有错误,但我没有输出。我收到警告:

In function 'int countNegative(int*, int)': 28:1: warning: control reaches end of non-void function [-Wreturn-type]

我怀疑参数传递给函数的方式可能有问题。

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int countNegative(int testArray[],int n);

    int main(){
        int testArray[] = {-2,0,44,12,-45,17,934,-21,67,88,91,1,0,6};
        int n = 14;

        countNegative(testArray,n);

        system("PAUSE");
        //EXIT_SUCCESS;
        return 0;
    }

    int countNegative(int testArray[],int n){
        for(int i=0; i<n; i++){
            if(testArray[i]<0){
                int index = testArray[i];
                return index;
            }
            else{
                cout << "No Negative Numbers";
            }
        }
    }

您应该有一个 int 变量来从您的函数调用中接收您的 return 值。您编写的代码只会 return 在您的数组中找到的第一个负数的第一个索引。如果您想要计算负数,那么您不应该立即 return。此外,如果您的数组最终没有负值,那么您永远不会 return anything ,您只会打印出没有负值的消息,并且您最终会为数组中的每个项目打印该消息事情是这样写的。

我会re-write这样。此函数将 return 数组中找到的负数的计数,如果未找到负数,则为 0。

int countNegative(int testArray[],int n){
    int negs = 0;

    for(int i=0; i<n; i++){
        if(testArray[i]<0){
            negs++;
        }
    }

    return (negs);

}

然后你应该像这样改变你的主要功能。

int main(){
    int testArray[] = {-2,0,44,12,-45,17,934,-21,67,88,91,1,0,6};
    int n = 14;
    int foundNegatives = countNegative(testArray,n);
    if ( ! foundNegatives ) {
         cout << "No Negative Numbers";
    }

    system("PAUSE");
    //EXIT_SUCCESS;
    return 0;
}

您的 countNegative 函数存在多个问题。

int countNegative(int testArray[],int n){
    for(int i=0; i<n; i++){
        if(testArray[i]<0){
            int index = testArray[i]; // <= You are returning value here, not the index in the array.
            return index;
        }
        else{
            cout << "No Negative Numbers";
            // No return here, should have returned 0 ?
        }
    }
    // No return here ?
}

从函数名来看,好像是要统计testArray中的负值,return负值的总数。

为什么会收到此警告?

这是因为,假设 testArray 中没有负数。在这种情况下,您不需要 return 任何东西,即您的控件也可以在没有任何 return 值的情况下到达您的 else 语句。控件也可能到达您的函数的末尾,而没有从那里 returning 任何值。由于您已将 return 类型标记为 int,因此在所有这些条件下您必须 return 一个整数值。

如果我的理解是正确的,您应该重构您的函数以仅迭代数组并计算否定条目的总数。最后,你可以return那个值。

    int countNegative(int testArray[],int n){
        int total_negatives = 0;
        for(int i=0; i<n; i++){
            if(testArray[i]<0){
                total_negatives++;
            }
        }
        if (total_negatives == 0)  cout << "No Negative numbers\n";
        return total_negatives;
    }

complete-program