我有以下代码,其中book是一个结构数组和alpha,beta。 。是结构的成员:
for(i = 0; i < sizeof(book)/sizeof(book[0]); ++i) {
n = book[i].alpha;
m = book[i].beta;
gnm = book[i].gamma;
hnm = book[i].delta;
dgnm = book[i].epsilon;
dhnm = book[i].zeta;
}
我想用它将结构数组中的数据存储到变量n,m,..等中。现在,此代码仅将最后一行数据存储到每个变量中。如何更改此代码,以便每次都不会覆盖该值?例如,不应该只存储12,而应该是123456789101112。
以下是代码:
int main()
{
int i,n,m,floot;
int aplha[90],beta[90], buf_size = 3500, offset = 0;
float gnm,hnm,dgnm,dhnm,gamma[90],delta[90],epsilon[90],zeta[90];
static char c_str[90];
struct wmm
{
int alpha;
int beta;
float gamma;
float delta;
float epsilon;
float zeta;
}book[]= {
{1, 0, -29496.6, 0.0, 11.6, 0.0},
{1, 1, -1586.3, 4944.4, 16.5, -25.9},
{2, 0, -2396.6, 0.0, -12.1, 0.0},
{2, 1, 3026.1, -2707.7, -4.4, -22.5},
{2, 2, 1668.6, -576.1, 1.9, -11.8},
[...50 or so similar lines omitted...]
{12, 11, -0.8, -0.2, -0.1, 0.0},
{12, 12, 0.0, 0.9, 0.1, 0.0}
};
答案 0 :(得分:1)
您需要以附加数据的方式存储它们。这可以使用某种字符串对象或数组来完成。我不确定你的数据类型是什么,所以我不能给出一个确切的例子,但我的想法是避免重复分配,因为这只会在循环的每次迭代时覆盖前一个值
答案 1 :(得分:1)
您需要更改用于存储数据的操作。现在您正在使用赋值('=')操作,该操作将覆盖以前存储在归档变量中的任何信息。
相反,您希望用适当的追加函数替换它。对于字符串数据,这可能意味着连接,对于整数数据,您正在查看足够复杂的内容,我建议先将其转换为字符串,然后存储该数据的串联。
所以你的循环看起来像:
for(i = 0; i < sizeof(book)/sizeof(book[0]); ++i)
{
append(&n, book[i].alpha);
append(&m, book[i].beta);
append(&gnm, book[i].gamma);
append(&hnm, book[i].delta);
append(&dgnm, book[i].epsilon);
append(&dhnm, book[i].zeta);
}
append
是您定义的过程,用于为您的数据类型执行适当的工作。
或者,我想您可以将存储变量转换为适当类型的数组,并简单地将传入数据分配给匹配的索引到这些数组中,例如: n[i] = book[i].alpha
,但这可能是多余的,因为您已经有一个存储该数据的结构数组。