2017-03-09 48 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