2016-05-20 8 views
1

Ich arbeite an einer Funktion, um den niedrigsten Wert innerhalb von 5 Eingangsdoppelwerten zu finden. Ich habe online eine Referenz gefunden. Ich habe versucht, meinen Code mit Arrays zu tun, jedoch erhalte ich den folgenden Fehler: Fehler: Thread 1: EXC_BAD_ACCESS (Code = 1, Adresse = 0x7fff5fc89000)Den niedrigsten Wert finden. Funktion. Fehler: Thread 1: EXC_BAD_ACCESS (Code = 1, Adresse = 0x7fff5fc89000)

Können Sie bitte beraten, wo mein Code falsch ist? Bin dankbar!

Online Referenz:

int findLowest(int s1, int s2, int s3, int s4, int s5) 
{ 
         int lowest = s1; 
          
          
    if (s2 < lowest)        
         { 
                  lowest = s2; 
         } 
         else if (s3 < lowest) 
         { 
                  lowest = s3; 
         } 
         else if (s4 < lowest) 
    { 
                  lowest = s4; 
         } 
         else if (s5 < lowest) 
         { 
                  lowest = s5; 
         } 
   
         cout << "The lowest test score is: " << lowest << endl; 
   
    return lowest; 
} 

Quelle: http://cboard.cprogramming.com/cplusplus-programming/149549-lowest-score-drop-assignment.html

Mein Code mit Arrays:

double findLowest(double a, double b, double c, double e, double f) 
{ 
    // creating an array numberRange[] to read the 5 input double 
    //values 
    double numberRange[5] = {a,b,c,e,f}; 

    // creating a variable minimum and assigning it the value of the 
    //first item in the numberRange[] array 
    double minimum = numberRange[0];  

    // looping through the numberRange array 
    for(int counter = 1; sizeof(numberRange)/sizeof(*numberRange) ; counter++) 
    // To get the number of elements in an array, you have to divide 
    // the size of the array by the size of each element 
    { 
     // checking if the numberRange value at the counter is less 
     // than the minimum value. If true, the minimum value is 
     //replaced with a new value. 
     if (numberRange[counter] < minimum) 
     { 
      minimum = numberRange[counter]; 
     } 

    } 

    return minimum; 
} 

Fehler: Thema 1: EXC_BAD_ACCESS (Code = 1, Adresse = 0x7fff5fc89000)

+0

Bitte fügen Sie den Tag nach der Programmiersprache – Spidey

+0

@spidey Dank für die Hervorhebung this..the Code ist in C++ – asaber

Antwort

1

Das Problem ist Ihr for-Loop-Test:

for(int counter = 1; sizeof(numberRange)/sizeof(*numberRange) ; counter++) 
//   this ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ is always true! 

Warum nicht einfach counter < 5?

+0

Making it 'Zähler <5' schlecht wäre. Außerdem muss es bei "0" beginnen, nicht bei "1". –

+0

Es beginnt bei 1, weil OP min zu Element 0 initialisiert. Warum sollte 'counter <5' schlecht sein? Die 5-ness der Funktion ist aufgrund der Parameter bereits fest codiert. – TowerFan

+0

@ToFan: Weil Sie es dann zweimal hart codieren. Tu das nicht. Guter Punkt über 1 though: D –

0

Der Stop-Zustand Ihrer for-Schleife ist ziemlich ungewöhnlich. Du fängst auch an von 1 zu zählen (warum nicht 0)? Wie wäre es eine gerade tun:

double numberRange[5] = {a,b,c,e,f}; 
return *std::min_element(numberRange); 
+0

OP verwendet 'numberRange [0]', um 'min' zu initialisieren, so dass die Vergleiche vom zweiten Element ausgehen ... –

+0

Sollte es nicht '* std :: min_element sein (std :: begin (numberRange), std :: end (numberRange)) '? –

Verwandte Themen