2017-03-09 46 views
-1

我正在構建一個C程序,它將斐波那契數字打印到一個文件中,並找到中位數。閱讀文件中的數字並找到中位數C

我得到的輸出是一個非常大而且不正確的數字。任何見解都會很棒。

平均函數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; 
    } 

文件

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

輸出

The Fibonacci median: -1576638118 

函數調用

median = findMedian(Fibonacci, size); 
+1

好吧,我不知道這是否是整個問題,但是對於偶數,'size%2'將會是'0',所以你的邏輯是倒退的。 – Mobius

+1

'if((medianPos + = 1)== count)'我認爲這條線有問題。 「medianPos + = 1」轉換爲「medianPos = medianPos + 1」。所以'medianPos'會繼續增加。 – Ayush

+1

爲什麼當你達到中間值時你需要繼續閱讀? (看起來你已經知道當你使用'size'時文件中有多少個數字) – Arash

回答

2

您的'count'變量未初始化。所以有可能你的if條件不會被滿足,你的medianVal也不會被初始化。

+0

感謝您輸入的Luci!我已經初始化爲0,問題依然存在。 (在上面添加了編輯) – RyeGuy

+0

您是否初始化了medianVal,否則可能會先滿足第二個條件,然後將值添加到單位化值 – Luci