我如何读取两个数组中有两列的文件?

时间:2013-12-04 11:08:20

标签: c

我在C中编写了这个函数,它在两个数组中导入一个两列文件,然后如果函数的输入值位于它们之间,则找到两个连续点之间的线性插值。

double Prevot_redden(double wave, double Av)
{
 int  i,j; 
 const double Rv = 2.75;  /* Set by Prevot */ 
 double       micron, r = 0.;
 micron = wave * 1e6;  /* convert to micron */
 /*Prevot reddening counters*/
 int raw_prevot_size=4002;
 /*data array for raw Prevot reddening */
 double *raw_prevot_wave_data,*raw_prevot_data;
 /*allocate space for raw Prevot reddening*/
 raw_prevot_wave_data=(double *)calloc(raw_prevot_size,sizeof(double *));
 raw_prevot_data=(double *)calloc(raw_prevot_size,sizeof(double *));
 /*reading a file*/
 char *f_prevot=fopen("SMC_prevot.dat","r");
 if (f_prevot==NULL ) 
 {
        fprintf(stderr,"Can not open reddening file !\n");
        exit(-1);
 }
 for (i=0;i<raw_prevot_size;i++)
 {
   sscanf(f_prevot,"%lf %lf",&raw_prevot_wave_data[i],&raw_prevot_data[i]);/*Wavelength and E(lambda-V)/E(B-V)*/
   /* convert to micron */
   raw_prevot_wave_data[i]*=1e-4;
 }

  for (j = 0; j < raw_prevot_size-2; j++)
  {
      if ((micron>raw_prevot_wave_data[j]) &&(micron<=raw_prevot_wave_data[j+1]))
      {

       r= lininterp(raw_prevot_wave_data[j],
                       raw_prevot_wave_data[j+1],
                       raw_prevot_data[j],
                       raw_prevot_data[j+1],
                       micron);
      }
  }
  r *= Av;
  r /= Rv;
  r /= -2.5;
  r  = pow(10, r);
  return(r);
}

当我编译代码时,对于带有命令fopen的行,我收到此警告消息。 有人可以解释消息的原因是什么吗?!!

In function 'Prevot_redden':
14: warning: initialization from incompatible pointer type 

3 个答案:

答案 0 :(得分:1)

你需要

FILE *f_prevot=fopen("SMC_prevot.dat","r");
·..

if (fscanf(f_prevot,"%lf %lf",&raw_prevot_wave_data[i],&raw_prevot_data[i]) == 2)
...
fclose(f_prevot);

答案 1 :(得分:0)

FILE *f_prevot=fopen("SMC_prevot.dat","r");

将是我的第一次尝试,因为fopen返回FILE * type

的指针

答案 2 :(得分:0)

char *f_prevot=fopen("SMC_prevot.dat","r");

fopen()返回FILE *,而不是char *