Иногда бывает удобным иметь возможность управлять выхо-дом из цикла иначе, чем проверкой условия в начале или вконце. Оператор BRеак позволяет выйти из операторов FOR,WHILE и DO до окончания цикла точно так же, как и из перек-лючателя. Оператор BRеак приводит к немедленному выходу изсамого внутреннего охватывающего его цикла (или переключате-ля). Следующая программа удаляет хвостовые пробелы и табуля-ции из конца каждой строки файла ввода. Она использует опе-ратор BRеак для выхода из цикла, когда найден крайний правыйотличный от пробела и табуляции символ. #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 становится отри-цательным (т.е., когда просмотрена вся строка). Советуем вамубедиться, что такое поведение правильно и в том случае,когда строка состоит только из символов пустых промежутков. В качестве альтернативы к BRеак можно ввести проверку всам цикл: WHILE ((N = GETLINE(LINE,MAXLINE)) > 0) { WHILE (--N >= 0 && (LINE[N] == ' ' \!\! LINE[N] == '\T' \!\! LINE[N] == '\N')) ; ...} Это уступает предыдущему варианту, так как проверка стано-вится труднее для понимания. Проверок, которые требуют пе-реплетения &&, \!\!, ! И круглых скобок, по возможности сле-дует избегать.