2017-02-03 2 views
0

je fait une fonction pour vérifier matrice pour les nombres négatifs, puis retourner la valeur; il prend le int testArray[] comme premier paramètre et int n=14 comme taille de tableau. J'ai utilisé une boucle pour aller à travers le tableau. J'utilise une déclaration if pour comparer testArray[i]<0 et j'ai une déclaration else d'imprimer un message qu'aucun numéro négatif n'a été trouvé. Le code compile sans erreurs, mais je n'ai pas de sortie. Je reçois un avertissement:avertissement au sujet du contrôle de flux dans la fonction

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

Je pense que cela peut être un problème avec la façon dont les paramètres sont transmis à la fonction.

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

Répondre

0

Votre fonction countNegative présente plusieurs problèmes.

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

Du nom de la fonction, on dirait qu'il va compter les valeurs négatives dans le testArray et retourner le nombre total de valeurs négatives.

Pourquoi recevez-vous cet avertissement?

En effet, disons qu'il n'y a pas de chiffres négatifs dans testArray. Dans ce cas, vous ne renvoyez rien, c'est-à-dire que votre contrôle peut également atteindre votre instruction else sans aucune valeur de retour. Le contrôle peut également atteindre la fin de votre fonction sans retourner de valeur à partir de là. Puisque vous avez marqué le type de retour comme int, vous devez renvoyer une valeur entière dans toutes ces conditions.

Si ce que je comprends est correct, vous devez factoriser votre fonction juste itérer le tableau et compter le nombre total d'entrées négatives. Enfin, vous pouvez renvoyer cette valeur.

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

Vous devriez avoir une variable int pour recevoir votre valeur de retour de votre appel de fonction. Votre code comme écrit ne retournera que le premier index du premier nombre négatif trouvé dans votre tableau. Si vous vouliez un nombre de nombres négatifs, vous ne devriez pas revenir tout de suite. De plus, si votre tableau ne contient aucune valeur négative, vous ne retournerez jamais rien, vous n'afficherez que le message qu'il n'y a pas de valeurs négatives et vous finirez par l'imprimer pour chaque élément de votre tableau de la façon dont les choses sont écrites .

Je récrire comme ça. Cette fonction renvoie le nombre de nombres négatifs trouvés dans le tableau ou 0 si aucun nombre négatif n'a été trouvé.

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

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

    return (negs); 

} 

Ensuite, vous devriez changer votre fonction principale comme ceci.

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