Как работает конструкция else else-if?

Допустим, у меня есть такой фрагмент кода:

for (int i = 0; i< 256; i++){
    if (strcmp (dictionary[i]->value, prefix.value) == 0 ) break;
    else if (i == (freeCode-1)){
        ...
    }
}

Тут я хочу сравнить содержимое двух указателей на char и если они равны — выйти из цикла, а если они не равны, и цикл уже прошелся по всему массиву dictionary, то перейти к следующей ветке.

Знаю, что вопрос может показаться глупым, но мне же не надо писать:

for (int i = 0; i< freeCode; i++){
    if (strcmp (dictionary[i]->value, prefix.value) == 0 ) break;
    else if (strcmp (dictionary[i]->value, prefix.value) == 0 && i == (freeCode-1)){
        ...
    }
}

  

Чтобы этот цикл отработал так, как мне нужно? В общем, вопрос в том, подставляет ли else if предыдущее условие?


Ответы (1 шт):

Автор решения: azlov

Чтобы этот цикл отработал так, как мне нужно? В общем, вопрос в том, подставляет ли else if предыдущее условие?

Вы работаете в одной итерации, поэтому что для if, что для else в вашем примере значение strcmp (dictionary[i]->value, prefix.value) == 0 будет одинаковым на каждой итерации.

Тут я хочу сравнить содержимое двух указателей на char и если они равны — выйти из цикла, а если они не равны, и цикл уже прошелся по всему массиву dictionary, то перейти к следующей ветке.

Вы перейдете к else только когда сравнить содержимого вернет false, поэтому еще сравнивать не нужно.

else if (i == (freeCode-1)){..}
→ Ссылка