2013-05-22 4 views
0

Je suis supposé écrire une fonction qui est passée deux paramètres: un tableau unidimensionnel de valeurs int, et une valeur entière. La fonction trouve la valeur dans le tableau la plus proche du second paramètre. Mon code fonctionne mais pas quand j'entre les nombres 1-5 ma sortie est 0. Quand j'entre des nombres au-dessus de 5 alors je commence à obtenir des résultats précis. Je ne suis pas trop sûr pourquoi cela arrive, mais voici mon code jusqu'à présent:Valeur la plus proche dans un tableau

#include <iostream> 
#include <cmath> 
using namespace std; 

const int MAX = 5; 

int searchNearest(int anArray[],int key) 
{ 
int value = abs(key - anArray[0]); 
int num = 0; 

for(int x = 0;x < MAX; x++) 
{ 
    if(value > abs(key - anArray[x])) 
    { 
     value = abs(key - anArray[x]); 
     num = anArray[x]; 
    } 
} 

return num; 

} 

int main() 
{ 
int A[MAX] = {3,7,12,8,10}; 

int search; 

int nearest; 

cout << "Enter a number to search: "; 

cin >> search; 

nearest = searchNearest(A,search); 

cout << "The nearest number is: " << nearest << endl; 

system("pause"); 
return 0; 

} 

Répondre

5

Dans votre code d'origine, numéros 1-5 sont les plus proches du premier élément du tableau. À cause de cela, le code dans l'instruction if n'est jamais exécuté et lorsque vous renvoyez num, vous renvoyez sa valeur initiale, qui se trouve être 0. Pour résoudre ce problème, il suffit d'initialiser num différemment:

int num = anArray[0]; // <-- used to be 0 
+0

Ahh Je savais que j'étais en train de négliger quelque chose. Merci pour l'aide! – Nick

+1

@Nick C'est quelque chose qui est assez facile à diagnostiquer avec un débogueur (ou en utilisant des instructions 'printf' ou' cout'). C'est aussi beaucoup moins frustrant que de regarder le code. – sfstewman

Questions connexes