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