我有一个3D结构阵列。 3D网格使得三个边中的每一个都相等。 3D网格的每个单元具有5个元素,例如颜色,温度,B(x),B(y)和B(z)。我必须用5个二进制文件填充结构数组的每个单元格,每个元素一个。
结构数组如下所示:
struct physical
{
float color;
float temperature;
float Bx,By,Bz;
};
extern struct physical ***physical;
我需要的是如何在C中执行数组的填充。
我已经实现了以下代码,用于将二进制文件中的数据读入结构数组中:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int i,j,k,ibox; /* Loop indices for the physical grid */
FILE *p,*q,*r,*s,*t;
p = fopen("phys_col_0107.bin","rb");
q = fopen("phys_temp_0107.bin","rb");
r = fopen("phys_Bx_0107.bin","rb");
s = fopen("phys_By_0107.bin","rb");
t = fopen("phys_Bz_0107.bin","rb");
if (!p) { printf("Unable to open color file!"); return 0; }
else if (!q) { printf("Unable to open the temp file!"); return 0; }
else if (!r) { printf("Unable to open the Bx file!"); return 0; }
else if (!s) { printf("Unable to open the By file!"); return 0; }
else if (!t) { printf("Unavle to open the Bz file!"); return 0; }
for ( j = 0 ; j < ny ; j++ )
{
for (k=0;k<nz;k++)
{
for (i=0;i<nx;i++)
{
fread( &physical[i][j][k].color , sizeof(physical[i][j][k].color) , 1 , p ) ;
fread( &physical[i][j][k].temperature , sizeof(physical[i][j][k].temperature) , 1 , q ) ;
fread( &physical[i][j][k].Bx , sizeof(physical[i][j][k].Bx) , 1 , r ) ;
fread( &physical[i][j][k].By , sizeof(physical[i][j][k].By) , 1 , s ) ;
fread( &physical[i][j][k].Bz , sizeof(physical[i][j][k].Bz) , 1 , t ) ;
}
}
}
fclose(p);
fclose(q);
fclose(r);
fclose(s);
fclose(t);
我只需要知道我是否正确地采取这种方式.....谢谢!!
答案 0 :(得分:0)
有几种方法可以做到这一点: