2017-03-09 6 views
-1

Ich konstruiere ein C-Programm, das Fibonacci-Zahlen in eine Datei druckt und den Median findet.Zahlen in Datei lesen und Median C finden

Die Ausgabe, die ich bekomme, ist eine sehr große und falsche Nummer. Jede Einsicht wäre großartig.

Median Funktion C

int findMedian(FILE *file, int size) 
    { 
     int medianPos, medianVal, readVal, count; 
     medianPos = (size/2); 
     count = 0; 

     while(fscanf(file,"%d", &readVal)==1) 
     { 
     if(medianPos == count) 
     { 
      medianVal = readVal; 
     } 
     if ((medianPos += 1) == count) 
     { 
      if(size % 2) //This means that it is even 
      { 

      } 
      else 
      { 
       medianVal += readVal; 
       medianVal /= 2; 
      } 
     } 
     count++; 
     } 
     return medianVal; 
    } 

Datei

1 1 2 3 
5 8 13 21 
34 55 89 144 
233 377 610 987 
1597 2584 4181 6765 

Ausgabe

The Fibonacci median: -1576638118 

Function Call

median = findMedian(Fibonacci, size); 
+1

Nun, ich habe keine Ahnung, ob das das ganze Problem ist, aber "size% 2" wird für gerade Zahlen "0" sein, also ist deine Logik dort rückwärts. – Mobius

+1

'if ((medianPos + = 1) == count)' Ich denke, diese Zeile hat das Problem. "medianPos + = 1" bedeutet "medianPos = medianPos + 1". Also wird 'medianPos' weiter steigen. – Ayush

+1

Warum müssen Sie weiterlesen, wenn Sie den Medianwert erreichen? (Sieht aus, als ob Sie bereits wissen, wie viele Zahlen in der Datei sind, wenn Sie 'size' verwenden) – Arash

Antwort

2

Ihre 'count' Variable ist nicht initialisiert. Es ist also möglich, dass Ihre if-Bedingungen nicht erfüllt werden und Ihre medianVal auch nicht initialisiert bleibt.

+0

Danke für die Eingabe Luci! Ich habe Count auf 0 initialisiert und das Problem bleibt bestehen. (Bearbeitung oben hinzugefügt) – RyeGuy

+0

Haben Sie auch medianVal initialisiert, ansonsten ist es möglich, dass die zweite Bedingung zuerst erfüllt wird und Sie dann einen Wert zu einem unitären Wert hinzufügen – Luci