2017-02-03 2 views
0

Ich machte eine Funktion, Array für negative Zahlen zu überprüfen und dann den Wert zurückzugeben; es nimmt die int testArray[] als ersten Parameter und int n=14 als Array-Größe. Ich benutzte eine for-Schleife, um durch das Array zu gehen. Ich verwende eine if Anweisung, um testArray[i]<0 zu vergleichen, und ich habe eine else Anweisung, um eine Nachricht zu drucken, dass keine negativen Zahlen gefunden wurden. Der Code kompiliert ohne Fehler, aber ich habe keine Ausgabe. Ich erhalte eine Warnung:Warnung über die Flusskontrolle in der Funktion

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

Ich vermute, dass es ein Problem mit der Art und Weise sein, können die Parameter sind Pässe an die Funktion.

#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"; 
      } 
     } 
    } 

Antwort

0

Es gibt mehrere Probleme mit Ihrer countNegative-Funktion.

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 ? 
} 

Aus dem Funktionsnamen, sieht es aus wie es die negativen Werte in den testArray und gibt die Gesamtzahl der negativen Werte zählen wird.

Warum erhalten Sie diese Warnung?

Das liegt daran, sagen wir mal, es gibt keine negativen Zahlen in testArray. In einem solchen Fall geben Sie nichts zurück, d. H. Ihr Steuerelement kann auch Ihre else-Anweisung ohne Rückgabewert erreichen. Das Steuerelement kann auch das Ende Ihrer Funktion erreichen, ohne einen Wert von dort zurückzugeben. Da Sie den Rückgabetyp als int markiert haben, müssen Sie unter allen diesen Bedingungen einen ganzzahligen Wert zurückgeben.

Wenn das, was ich verstehe, korrekt ist, sollten Sie Ihre Funktion so umgestalten, dass sie das Array nur iteriert und die Gesamtzahl der negativen Einträge zählt. Schließlich können Sie diesen Wert zurückgeben.

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

Sie sollten eine int-Variable haben, um Ihren Rückgabewert von Ihrem Funktionsaufruf zu erhalten. Ihr geschriebener Code liefert nur den ersten Index der ersten negativen Zahl in Ihrem Array. Wenn Sie eine Anzahl von negativen Zahlen haben wollten, sollten Sie nicht sofort zurückkehren. Wenn Ihr Array keine negativen Werte hat, dann geben Sie niemals etwas zurück, Sie würden nur die Nachricht ausdrucken, dass es keine negativen Werte gibt, und Sie würden das für jedes Element in Ihrem Array so ausgeben, wie es geschrieben wurde .

Ich würde es so neu schreiben. Diese Funktion gibt die Anzahl der negativen Zahlen im Array oder 0 zurück, wenn keine negativen Zahlen gefunden wurden.

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

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

    return (negs); 

} 

Und dann sollten Sie Ihre Hauptfunktion so ändern.

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; 
} 
Verwandte Themen