0

脚本的第一部分必须从文本文件中读取风数据。文件的第一个数字是行数,每行包含 6 个数据:纬度、经度、高度、模数、海拔和方位角。当我在调试模式下在 VC++ 上运行我的脚本时,我注意到dat不是 wind_dat 的向量,而只是 *wind_dat* 的类型元素。但是,如果我在fscanf的for循环中插入断点,我确定所有变量都已读取,但未保存在dat中,只有第一行..

在这里,我发布了我的脚本的相关代码:

typedef struct wind {
double xlat;
double ylong;
double zheight;
double mod;
double elev;
double az;} wind_dat;

static wind_dat *  dataprocess( const char *, int*);
static void   pol2cart( double *, double, double, double);

wind_dat       *dat;
int         num;


int main(int argc, char **argv)
{   

dat=dataprocess(filename,&num);
...
}

static wind_dat* dataprocess (const char *filename, int *num)
{
int it;
double coord[3], obs_cart[3], a[3][3];
FILE *ptrfile;

if ((fopen_s(&ptrfile,filename, "r"))!=0)
{printf("\nError while opening file.\n");
exit(EXIT_FAILURE);}
fscanf_s(ptrfile,"%d",num);

if ((dat=(wind_dat*)malloc((*num)*sizeof(wind_dat)))==NULL)
    exit(EXIT_FAILURE);

pol2cart(obs_cart,obs[0],obs[1],obs[2]+6371000);
a[0][0]=cos(az)*cos(obs[1]+PI)+sin(az)*sin(PI+obs[1])*cos(PI-obs[0]);
a[0][1]=cos(az)*sin(obs[1]+PI)-sin(az)*cos(obs[1]+PI)*cos(PI-obs[0]);
a[0][2]=-sin(az)*sin(PI-obs[0]);
a[1][0]=sin(az)*cos(obs[1]+PI)-cos(az)*sin(obs[1]+PI)*cos(PI-obs[0]);
a[1][1]=sin(az)*sin(obs[1]+PI)+cos(az)*cos(obs[1]+PI)*cos(PI-obs[0]);
a[1][2]=cos(az)*sin(PI-obs[0]);
a[2][0]=sin(obs[1]+PI)*sin(PI-obs[0]);
a[2][1]=-sin(PI-obs[0])*cos(obs[1]+PI);
a[2][2]=cos(PI-obs[0]);
for (it=0;it<(*num);it++)
    {fscanf_s(ptrfile,"%lf %lf %lf %lf %lf %lf",&dat[it].xlat, &dat[it].ylong, &dat[it].zheight, &dat[it].mod, &dat[it].elev, &dat[it].az);

    pol2cart(coord, dat[it].xlat, dat[it].ylong, dat[it].zheight+6371000);
    coord[0]=coord[0]-obs_cart[0];
    coord[1]=coord[1]-obs_cart[1];
    coord[2]=coord[2]-obs_cart[2];
    dat[it].xlat =  coord[0]*a[0][0]+coord[1]*a[0][1]+coord[2]*a[0][2];
    dat[it].ylong = coord[0]*a[1][0]+coord[1]*a[1][1]+coord[2]*a[1][2];
    dat[it].zheight=coord[0]*a[2][0]+coord[1]*a[2][1]+coord[2]*a[2][2];
    dat[it].az=dat[it].az-az/PI*180;
    dat[it].mod=dat[it].mod*arrow_factor;
    }
fclose(ptrfile);
return(dat);
}

static void pol2cart(double *dat, double x, double y, double z)
{

dat[0]=z*cos(x*180/PI)*cos(y*180/PI);
dat[1]=z*cos(x*180/PI)*sin(y*180/PI);
dat[2]=z*sin(x*180/PI);
}
4

1 回答 1

0

在 Watch 窗口中,键入dat,100以查看数组dat指向的前 100 个元素。

调试器无法从变量声明中知道它dat实际上指向多个对象。所以它需要一个提示。

于 2013-09-22T14:37:33.383 回答