我在数组中的一个值为“0”

时间:2015-07-24 16:14:37

标签: c arrays

在我的文件中包含两列,我尝试从文件中收集数据。我需要在一列中比较两个值。例如,如果array[5]高于array[4],请执行某些操作。这是我的代码:

int control(double col2[], double col3[], int subscript){

  double a, b, fcontrol ;
  int k /* group */ ;  

  /* some necessary values for JD controlling */ 
  a = col2[subscript] ;
  b = col2[subscript-1] ;        

  /* for JD controlling */
  fcontrol = a - b ; 
  printf("kontrol = %.12f     a = %.12f     b = %.12f\n", fcontrol, a, b) ;  

  /* if value of between two data is equal or higher than 10 hour return 1 */ 
  if(fcontrol >= 0.416666666667){

     return 1 ;
  }
  else{

     return 0 ;
}

b始终为0。我该如何解决?

我的终端是:

kontrol = 258.426728989849     a = 258.426728989849     b = 0.000000000000

kontrol = 258.447161800788     a = 258.447161800788     b = 0.000000000000

kontrol = 258.467594711488     a = 258.467594711488     b = 0.000000000000

kontrol = 260.245248070103     a = 260.245248070103     b = 0.000000000000

kontrol = 260.265680861012     a = 260.265680861012     b = 0.000000000000

kontrol = 260.286113551461     a = 260.286113551461     b = 0.000000000000

kontrol = 260.306546441912     a = 260.306546441912     b = 0.000000000000

这是我的所有代码:

/* TASK */
#include<stdio.h>

int kontrol(double col2[], double col3[], int subscript) ;


int main(){


   int kolon1,
       n = 0, /* for array */
       j, z, /* for "for" loopr */
       flag = 0 ; 
   int  grup = 0 ;

   double kolon2, kolon3,
          col2[100000], col3[100000] ; 


   char ignore[100]; 


   FILE *okuPtr ; 
   FILE *yazPtr ; 


   char oku_tbl[100] ;
   sprintf(oku_tbl, "deneme.tbl") ;

   /* error if file isnt opened*/
   if ((okuPtr = fopen(oku_tbl, "r")) == NULL)
      printf("%s Acilamadi", oku_tbl) ;
   /* file is opened */ 
   else{

      char yaz_tbl[100] ;
      sprintf(yaz_tbl, "deneme_data.tbl") ; 

      /* errof if file isnt opened */
      if((yazPtr = fopen(yaz_tbl, "w")) == NULL)
         printf("%s acilamadi\n", yaz_tbl) ;
      /* file is opened */ 
      else{           
         /* first read */ 
         fscanf(okuPtr, "%d%lf%lf", &kolon1, &kolon2, &kolon3) ;

         /* until end of file */ 
         while (!feof(okuPtr)){
            /* ignore first 3 line */        
            fgets(ignore, 100, okuPtr) ;


            col2[n] = kolon2 ;
            col3[n] = kolon3 ;


            flag = control(col2, col3, n) ; 


            n++ ; 

            /* if flag == 1 */
            if (flag == 1){

               for (z = 0 ; z <= --n ; z++){
                  fprintf(yazPtr, "%d\t%.12f\t%.12f\n", grup, col2[z], col3[z]) ;
               }

               n = 0 ; 
               grup++ ; 
            }

            /* yeni veri oku */ 
            fscanf(okuPtr, "%d%lf%lf", &kolon1, &kolon2, &kolon3) ;
         }

        /* diziyi yazdir 
         for (j = 0 ; j <= n-1 ; j++){
         printf("%d\t%-.12f\t%-.12f\n", k, col2[j], col3[j]) ;
         } */
      } 
   }       
return 0 ;        
}


int control(double col2[], double col3[], int subscript){


  double a, b,
         fcontrol ;
  int k /* group */ ;  

  /* some necessary values for JD controlling */ 
  a = col2[subscript] ;
  b = col2[subscript-1] ;        

  /* for JD controlling */
  fcontrol = a - b ; 
  printf("kontrol = %.12f     a = %.12f     b = %.12f\n", fcontrol, a, b) ;  

  /* if value of between two data is equal or higher than 10 hour return 1 */ 
  if(fcontrol >= 0.416666666667){

     return 1 ;
  }
  else{

     return 0 ;
  }         
}

1 个答案:

答案 0 :(得分:0)

问题是,当您control

时第一次致电n=0
 flag = control(col2,col3, n);

但是请注意b=col2[subscript-1]实际上是b=col2[-1]这会产生问题,因为数组索引从0开始,因此您的程序会出现这种情况。

      while (!feof(okuPtr))

总是错的。见这里 - Why is “while ( !feof (file) )” always wrong?

而是使用它 -

while(fgets(ignore, 100, okuPtr))
{
  /*Your code*/
}