First Ill详细说明:
我扫描了6个源文件,分别对应6个不同的区域。数据是我在以下结构中存储的有关地震的信息:
typedef struct {
int year;
int month;
int day;
char time[9];
} datetime_t;
typedef struct {
datetime_t datetime;
double latitude;
double longitude;
double magnitude;
double depth;
char location[LOCATION];
} data_t;
然后我创建了6个数组,每个地区一个:
data_t Alaska[MAX_INFO];
data_t Central[MAX_INFO];
data_t Inter[MAX_INFO];
data_t East[MAX_INFO];
data_t West[MAX_INFO];
data_t Canada[MAX_INFO];
现在我的目标是显示一个31x6的二维数组,显示每个地区每天的地震次数。我知道我可以在这样做了31天,对于6个地区,但必须有一个更有效的方式:
for (i=0;i<A;i++)
{
if (Alaska[i].datetime.day == 1)
{
day_array[0][0] = i;
}
else if (Alaska[i].datetime.day == 2)
{
day_array[1][0] = i - day_array[0][0];
}
else if (Alaska[i].datetime.day == 3)
{
day_array[2][0] = i - day_array[1][0] - day_array[0][0];
}
}
我想到了一些事情:
for(j=0;j<REGIONS;j++) /*particularly these two parts to fill the array*/
{
for(i=0;i<DAYS;i++) /*but I end up with same problem*/
{
for(k=0;k<A;k++)
{
if(Alaska[k].datetime.day == 1)
{
day_array[i][j] = k;
}
else if(Alaska[k].datetime.day == 1)
{
day_array[i][j] = k;
}
}
}
} /*I KNOW THIS DOESNT WORK AS IS */
我知道技术上我可以做的第一件事就是186天,每个地区都有一个for循环,但我觉得有一种更有效的方法可以做到这一点而我似乎没有看到它......我不需要任何人告诉我该怎么做,而是如果有人能提供帮助的话,向正确的方向推进会很棒!
答案 0 :(得分:1)
您的目标似乎是避免为每个数组编写单独的代码。在这种情况下,您有几种选择,其中
data_t *regions[] = {Alaska, Central, Inter, East, West, Canada};
)并将其用作2D数组。data_t *
的函数并根据需要对其进行分析。将每个区域内的对象传递给它。