覆盖for循环中的值

时间:2011-05-31 14:16:09

标签: c for-loop

我有以下代码,其中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}
 };

2 个答案:

答案 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,但这可能是多余的,因为您已经有一个存储该数据的结构数组。