寻求有关结构的帮助 [英] Ask for help about the structure

查看:65
本文介绍了寻求有关结构的帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人都可以帮我找出''DataTable'的结构吗?

首先循环14层或800 * 800阵列?

(NumX = NumY = 800)

gridde和WriteHeader是两个结构

谢谢~~~ :)

void WriteCloudStats(GRIDDEF * griddef ,char * StatsDir,int month,int

year,short **** DataTable)

{


FILE * fptr [2];

int i,j,k,l;

char filename [200],命令[250],monstr [5];

GRIDDEF标题;


if(month< 10)

sprintf(monstr,0%d,月份);

else

sprintf(monstr,"%d",month);


sprintf(文件名,"%s / CldYearlyStats_% d_

%d.dat",StatsDir,month,year);

sprintf(命令,&/ bin / cp%s%s.arc",filename, filename);

system(command);

fptr [0] = fopen(filename," w");

sprintf(filename ,"%S / CldTotalStats_%d.dat&q uot ;, StatsDir,month);

sprintf(命令,&/ bin / cp%s%s.arc",filename,filename);

system(命令) );

fptr [1] = fopen(filename," w");


for(i = 0; I&2; i ++){

if(fptr [i]!= NULL){

WriteHeader(griddef,fptr [i]);

for( j = 0; j <14; j ++)fwrite(

& DataTable [i] [j] [0] [0],

sizeof(短),

griddef-> NumX * griddef-> NumY,

fptr [i]

);

printf (数据是%d \ n,& DataTable [i] [j] [0] [0]);

fclose(fptr [i]);

}

}

}

Can anyone help me to find out what are the structure of ''DataTable'' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Thank you~~~ :)
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
{

FILE *fptr[2];
int i,j,k,l;
char filename[200],command[250],monstr[5];
GRIDDEF header;

if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);

sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");

for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);
printf("Data is %d \n",&DataTable[i][j][0][0]);
fclose(fptr[i]);
}
}
}

推荐答案

xiao< li *** ******@gmail.com写的:
xiao <li*********@gmail.comwrote:

任何人都可以帮我找出''DataTable'的结构是什么?

首先循环14层或800 * 800阵列?

(NumX = NumY = 800)

gridde和WriteHeader是两个结构
Can anyone help me to find out what are the structure of ''DataTable'' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures



因为你提供的信息相当不完整而且并不总是

一致所有以下内容都不过是猜测...

Since the information you give is rather incomplete and not always
consistent all of the following is not more than guesswork...


无效WriteCloudStats(GRIDDEF * griddef,char * StatsDir,int month,int

year,short **** DataTable)

{

FILE * fptr [2];

int i,j,k,l;
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
{
FILE *fptr[2];
int i,j,k,l;



''k''和'l''从不使用。

''k'' and ''l'' are never used.


char filename [ 200],命令[250],monstr [5];

GRIDDEF标题;
char filename[200],command[250],monstr[5];
GRIDDEF header;



''header''从未使用过

''header'' is never used


if(month< 10)

sprintf(monstr,0%d,月份);

其他

sprintf(monstr,%d,月份);
if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);



这可以简化为单行


sprintf(monstr,%02d,月);

This could be simplfied to a single line of

sprintf( monstr, "%02d", month );


sprintf(filename,"%s / CldYearlyStats_%d_%d.dat",StatsDir,month,year);

sprintf(命令,&/ bin / cp%s%s.arc",filename,filename);

system(命令);

fptr [0 ] = fopen(filename," w");

sprintf(filename,"%s / CldTotalStats_%d.dat",StatsDir,month);

sprintf (命令,/ bin / cp%s%s.arc,文件名,文件名);

system(命令);

fptr [1] = fopen(文件名," W");
sprintf(filename,"%s/CldYearlyStats_%d_%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");


for(i = 0; i< 2; i ++){

if(fptr [i]!= NULL ){

WriteHeader(griddef,fptr [i]);
for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);



这可能会将''griddef'指向的任何内容写入文件

This probably writes whatever ''griddef'' points to to the file


for(j = 0; j< 14; j ++)fwrite(

& DataTable [i] [j] [0] [0],

sizeof(短),
griddef-> NumX * griddef-> NumY,

fptr [i]

);
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);



这显然应该写14次''griddef-> NumX *

griddef-> NumY * sizeof(短) ''到文件的字节,数据

从内存开始,来自地址''& DataTable [i] [j] [0] [0]''

''j''从0到13运行。


所以你首先将''griddef''写入文件,然后14 repe-
$ b 800美元800x800数据点的价格。


但我有点担心,如果编译器会喜欢它,因为它/ b $ b没有任何信息DataTable是一个4-domensional

数组,关于索引范围。因此,在DataTable [i] [j] [0] [0]的确切位置,它无法计算
。我想你会将

更改为函数


void WriteCloudStats(GRIDDEF * griddef,

char * StatsDir,

int month,

int year,

short DataTable [2] [14] [800] [800])


允许编译器确定数据的位置。或者你有

自己计算地址


for(j = 0; j <14; j ++)

fwrite(DataTable +(14 * i + j)* griddef-> NumX * griddef-> NumY

sizeof(短),

griddef-> NumX * griddef-> NumY,

fptr [i]);


使用时


void WriteCloudStats(GRIDDEF * griddef,

char * StatsDir,

int month,

int year,

short * DataTable)


这也有一个优点,它也适用于其他网格尺寸

比800x800。


内部写循环可以通过完全摆脱

并在一次调用中写入所有数据来进一步简化


fwrite(DataTable + 14 * i * griddef-> ; NumX * griddef-> NumY

sizeof(短),

14 * griddef-> NumX * griddef-> NumY,

fptr [i]);


问候,Jens

-

\ Jen s Thoms Toerring ___ jt@toerring.de

\ __________________________ http://toerring.de


xiao写道:
xiao wrote:

任何人都可以帮我找出''DataTable'的结构吗?

首先循环14层或800 * 800阵列?

(NumX = NumY = 800)

gridde和WriteHeader是两个结构

谢谢~~~ :)


void WriteCloudStats(GRIDDEF * griddef,char * StatsDir,int month,int

year,short **** DataTable)
Can anyone help me to find out what are the structure of ''DataTable'' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Thank you~~~ :)
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)



糟糕的ASCII艺术:


短****短***短**短*短


DataTable - [0]

[1] - [1] [0]

... [1] [1] - [1] [1] [0]

... [1] [1] [1] - [1] [1] [1] [0]

... [1] [1] [1] [1]

...

Bad ASCII art:

short**** short*** short** short* short

DataTable -[0]
[1] -[1][0]
... [1][1] -[1][1][0]
... [1][1][1] -[1][1][1][0]
... [1][1][1][1]
...


{


FILE * fptr [2];

int i,j,k,l;

char filename [200],命令[250],monstr [5];

GRIDDEF标题;


if(month< 10)

sprintf(monstr,0%d,月份);

其他

sprintf(monstr,"%d" ,月);
{

FILE *fptr[2];
int i,j,k,l;
char filename[200],command[250],monstr[5];
GRIDDEF header;

if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);



`sprintf(monstr,"%02d",month);''更容易。 (更容易:

完全不让它,因为`monstr''从未使用过。)

`sprintf(monstr, "%02d", month);'' is easier. (Easier still:
leave it out altogether, since `monstr'' is never used.)


sprintf(filename,"% s / CldYearlyStats_%d_

%d.dat",StatsDir,month,year);

sprintf(命令,&/ bin / cp%s%s.arc" ;,filename,filename);

system(command);

fptr [0] = fopen(filename," w");

sprintf(filename,"%s / CldTotalStats_%d.dat",StatsDir,month);

sprintf(命令,&/ bin / cp%s%s.arc",filename, filename);

system(command);

fptr [1] = fopen(filename," w");
sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");



你最好希望使用cp命令来解决任何问题,或者你可以清除旧数据。 ..因为

你实际上并不需要原始副本(你立即覆盖它们

),为什么不使用rename()函数来改变

现有文件的名称?好处是你可以检查

rename()是成功还是失败;使用system()没有可移植的方式


You''d better hope that nothing goes wrong with either of
the cp commands, or you could wipe out the old data ... Since
you don''t actually need the original copies (you overwrite them
immediately), why not just use the rename() function to change
the existing files'' names? The benefit is that you can check
whether rename() succeeded or failed; there''s no portable way
to do so with system().


for(i = 0; i< 2; i ++ ){

if(fptr [i]!= NULL){

WriteHeader(griddef,fptr [i]);

for(j = 0; j< 14; j ++)fwrite(

& DataTable [i] [j] [0] [0],

sizeof(短),

griddef-> NumX * griddef-> NumY,

fptr [i]

);
for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);



这可能是错的,因为它似乎假设

DataTable指向的东西是一个四维数组
连续存储位置的
。 (至少,它似乎假设在最右边的两个维度上接近
;在不知道NumX和NumY表示什么的情况下很难确定

。)


数组和指针是不一样的,即使有很多共同点。我建议您在

< http://www.c-faq上学习comp.lang.c常见问题(FAQ)列表的第6节

。 com /> ;,然后如果你还有问题请回到这里。


-
Er ********* @ sun.com



>

* * * if(month< 10)

* * * * sprintf(monstr," 0%d" ;,月);

* * *

* * * * sprintf(monstr,"%d",month);
>
* * *if(month < 10)
* * * * sprintf(monstr,"0%d",month);
* * *else
* * * * sprintf(monstr,"%d",month);



怎么样


sprintf(monstr,"%02d",month) ;

How about:

sprintf( monstr, "%02d", month );


这篇关于寻求有关结构的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆