Используется неинициализированная локальная переменная 'j'

Вот часть кода, который у меня есть. Я получаю ошибочную неинициализированную локальную переменную 'j' и не вижу ее. насколько я могу судить, он используется. Может кто-нибудь, пожалуйста, помогите?

float Calculate(Element ElmAry[30], Formula FormAry[30])
{
    int i;
    int j;
    float MoleWT = 0;
    float MoleSum = 0;
    char e1;
    char e2;
    char f1;
    char f2;

    for(i = 0; i < 30; i++) {

        f1 = FormAry[j].Element1;
        f2 = FormAry[j].ElementA;
        e1 = ElmAry[i].eN1;
        e2 = ElmAry[i].eN1;

        if(e1 == f1 && e2 == f2) {
            MoleWT = ElmAry[i].Weight * FormAry[j].Atom;
            MoleSum = MoleSum + MoleWT;
            j++;
        }
    }

return MoleSum;
}

3 ответа

Таким образом, вы используете переменную j первый в очереди

f1 = FormAry[j].Element1;

Но вы не присвоили никакого значения j ранее, следовательно, "неинициализированный". Предыдущее упоминание о j было в вашей декларации:

int j;

Вам нужно присвоить ему значение, например 0:

int j = 0;

Это называется "инициализация", потому что, если вы не присваиваете значение переменной, какое значение вы должны ожидать от этой переменной?

Вы не дали j значение, следовательно, uninitialized variable ошибка.

int j; не то же самое, что назначение j значение 0.

Ты должен сделать: int j = 0;

Ошибка не в этом j используется. Ошибка в том что j используется, но не инициализируется.

Я предлагаю изменить ваш for цикл до:

for(i=0, j=0; i < 30; i++, j++)

Как я думаю, это то, что вы на самом деле пытаетесь сделать...

Другие вопросы по тегам