Часом зручно мати можливість вийти з циклу інакше, ніж шляхом тестування умови зверху або внизу. Саме твердження break забезпечує передчасний вихід із for, while або do-циклів, так само як і у випадку зі 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 і do, тестова частина виконується негайно; у випадку for, керування передається етапові приросту. Твердження continue вживається тільки з циклами, а не switch-конструкціями. Операторcontinue всередині switch, розміщеному в циклі, спричинить наступну ітерацію циклу.
Як приклад, наступний фрагмент коду обробляє тільки додатні елементи масиву a, пропускаючи від'ємні.
for (i = 0; i < n; i++) {
if (a[i] < 0) /* пропустити від'ємні елементи */
continue;
... /* обробити додатні елементи */
}
Твердження з continue часто використовуються, коли наступна частина циклу занадто складна, тож перевірка протилежної умови та додатковий відступ коду вправо гніздить програму занадто глибоко.