netlib.narod.ru< Назад | Оглавление | Далее >

3.7. Инструкции break и continue

Иногда бывает удобно выйти из цикла не по результату проверки, осуществляемой в начале или в конце цикла, а каким-то другим способом. Такую возможность для циклов for, while и do-while, а также для инструкции switch предоставляет инструкция break. Эта инструкцияот вызывает немедленный выход из самого внутреннего из объемлющих ее циклов и инструкций switch.

Приведенная ниже функция trim удаляет из строки завершающие пробелы, табуляции и символы новой строки. Инструкция break используется в ней для выхода из цикла, когда встречается первый символ, отличающийся от названных.

/* trim: удаление завершающих пробелов, табуляций и
         символов новой строки */
int trim(char s[])
{
    int n;

    for (n = strlen(s)-1; n >= 0; n--)
        if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
            break;
    s[n+1]='\0';
    return n;
}

Функция strlenвозвращает длину строки. Цикл for просматривает строку в обратном порядке, начиная с конца, до тех пор, пока не встретится символ, отличный от пробела, табуляции и новой строки. Цикл прерывается, как только обнаружен такой символ, или когда n станет отрицательным (т.е. вся строка будет просмотрена). Убедитесь, что функция ведет себя правильно и в случаях, когда строка пуста или состоит только из символов-разделителей.

Инструкция continue в чем-то похожа на break, но применяется гораздо реже. Она вынуждает ближайший объемлющий ее цикл (for, while или do-while) начать следующую итерацию. Для while и do-while это означает немедленный переход к проверке условия, а для for — к изменению счетчика цикла. Инструкцию continue можно применять только в циклах, но не в инструкции switch. Если инструкция continue находится внутри инструкции switch, расположенной внутри цикла, она вызовет переход к следующей итерации этого цикла.

Вот фрагмент программы, обрабатывающей только неотрицательные элементы массива a (отрицательные пропускаются):

    for (i = 0; i < n; i++) {
        if (a[i] < 0)   /* пропуск отрицательных элементов */
            continue;
        ...             /* обработка положительных элементов */
    }

Инструкцию continue часто используют в случаях, когда следующая за инструкцией часть цикла сложна, а замена условия в цикле на противоположное и введение еще одного уровня приводят к слишком большому числу уровней вложенности.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz