关于函数中流量控制的警告
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;
}
我创建了一个函数来检查数组中的负数,然后 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;
}