Перезапись значений в цикле for - PullRequest
2 голосов
/ 31 мая 2011

У меня есть следующий код, где книга представляет собой массив структур и альфа, бета. , являются членами структуры:

 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 ]

1 голос
/ 31 мая 2011

Вам необходимо изменить операцию, которую вы используете для хранения данных.Прямо сейчас вы используете операцию присваивания ('='), которая перезапишет любую информацию, ранее сохраненную в ваших переменных архивирования.

Вместо этого вы хотите заменить это соответствующей функцией добавления.Для строковых данных это, вероятно, означает конкатенацию, для целочисленных данных вы смотрите на что-то достаточно сложное, поэтому я бы предложил сначала преобразовать его в строку, а затем сохранить конкатенацию этих данных.

Таким образом, ваш цикл будет выглядеть примерно так:

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, но это может быть избыточно, если у вас уже есть массив структур, хранящих эти данные длявы.

1 голос
/ 31 мая 2011

Вам необходимо хранить их таким образом, чтобы к ним добавлялись данные. Это можно сделать с помощью какого-либо строкового объекта или массива. Я не уверен, какой у вас тип данных, поэтому я не могу привести точный пример, но идея состоит в том, чтобы избежать повторного присваивания, подобного этому, поскольку это будет просто переопределять предыдущее значение при каждой итерации цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...