Иногда бывает удобным иметь возможность управлять выходом из цикла иначе, чем проверкой условия в начале или в конце. Оператор break позволяет выйти из операторов for, while и do до окончания цикла точно так же, как и из переключателя. Оператор break приводит к немедленному выходу из самого внутреннего охватывающего его цикла (или переключателя).
Следующая программа удаляет хвостовые пробелы и табуляции из конца каждой строки файла ввода. Она использует оператор break для выхода из цикла, когда найден крайний правый отличный от пробела и табуляции символ.
#define maxline 1000 main() /* remove trailing blanks and tabs */ { int n; char line[maxline];
while ((n = getline(line,maxline)) > 0) { while (--n >= 0) if (line[n] != ' ' && line[n] != '\t' && line[n] != '\n') break; line[n+1] = '\0'; printf("%s\n",line); } }
функция getline возвращает длину строки. Внутренний цикл начинается с последнего символа line (напомним, что --n уменьшает n до использования его значения) и движется в обратном направлении в поиске первого символа , который отличен от пробела, табуляции или новой строки. Цикл прерывается, когда либо найден такой символ, либо n становится отрицательным (т.е., когда просмотрена вся строка). Советуем вам убедиться, что такое поведение правильно и в том случае, когда строка состоит только из символов пустых промежутков.
В качестве альтернативы к break можно ввести проверку в сам цикл:
while ((n = getline(line,maxline)) > 0) { while (--n >= 0 && (line[n] == ' ' \!\! line[n] == '\t' \!\! line[n] == '\n')) ; ... }
Это уступает предыдущему варианту, так как проверка становится труднее для понимания. Проверок, которые требуют переплетения &&, \!\!, ! и круглых скобок, по возможности следует избегать.