关于功能中的流量控制的警告

时间:2017-02-03 03:19:24

标签: c++ arrays function for-loop flow-control

我做了一个函数来检查数组的负数,然后返回值;它将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";
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

你应该有一个int变量来接收函数调用的返回值。您编写的代码只返回数组中第一个负数的第一个索引。如果你想要一个负数的计数,那么你不应该马上回来。此外,如果您的数组最终没有负值,那么您永远不会返回任何内容,您只会打印出没有负值的消息,并且您最终会按照编写内容的方式为数组中的每个项打印

我会像这样重写它。此函数将返回在数组中找到的负数的计数,如果没有找到负数,则返回0。

if (app()->environment('production')) {...}

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

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

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

    return (negs);

}

答案 1 :(得分: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中的负值并返回负值的总数。

你为什么收到这个警告?

这是因为,我们说testArray中没有负数。在这种情况下,您不会返回任何内容,即您的控件也可以在没有任何返回值的情况下到达您的else语句。控件也可能到达函数的末尾而不从那里返回任何值。由于您已将返回类型标记为int,因此必须在所有这些条件下返回整数值。

如果我理解的是正确的,你应该重构你的函数来迭代数组并计算负数条目的总数。最后,您可以返回该值。

    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