2017-02-03 9 views
0

負の数の配列をチェックしてから値を返す関数を作った。第1パラメータとして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

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

0

関数呼び出しから戻り値を受け取るには、int変数が必要です。書かれたコードは、配列内にある最初の負の数の最初のインデックスのみを返します。負数のカウントが必要な場合は、すぐに戻ってはいけません。また、配列が負の値を持たない場合は何も返さず、負の値がないというメッセージを出力するだけで、配列の各項目について、 。

私はこのように書き直すだろう。この関数は、配列にある負の数のカウントを返します。負の数が見つからない場合は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; 
} 
関連する問題