char input[]="SSSWILTECH1\1\11W\1WALLMP1"; | Массив символов инициируется строкой символов "SSS...MP1". |
for ( i=2; (c=input[2])!='\0'; i++ ) { | Переменная c принимает значения символов из массива input, начиная с третьего. |
switch('S') | При первом проходе по перключателю c='S'; |
default: putchar('S') | Так как ни одна из меток вариантов не совпала с 'S', то выбирается вариант default. Печатается S. |
continue | Оператор продолжения приводит к очередному повторению самого внутреннего из объемлющих циклов, в данном случае это оператор for. Заметим, что оператор продолжения действует как оператор перехода к повторной инициации заголовка в операторе for. |
for ( ; (c=input[3])!='\0'; i++ ) { | Значение четвертого символа из input записывается в c. |
switch('S') | c='W' |
default: putchar('S'); continue | Как и раньше, печатается W. Аналогично для i=4, c='I' |
switch('L') | i=5, c='L' |
case 'L': continue | Выбирается вариант 'L', ничего не печатается |
в цикле for | |
i=5, c='L' | Ничего не печатается. |
i=6, c='T' | Печатается T. |
i=7, c='E' | Ничего не печатается. |
i=8, c='C' | Печатается C. |
i=9, c='Y' | Печатается H. |
switch('1') | i=10, c='1' |
case '1': break | Оператор разрыва приводит к выходу из ближайшего объемлющего цикла или переключателя. В данном случае он вызывает переход на оператор, следующий за переключателем. |
putchar(' ') | Печатается пробел. |
for ( ; (c=input[11])!='\0'; i++ ) { | Возвращаемся назад к началу оператора for. |
switch('\1') | Символьная константа '\n', где n состоит не более чем из четырех восьмеричных цифр, соответствует символу с указанным восьмеричным кодом. Например, в кодировке ASCII \0 соответствует символу nul, а \101 - символу A. |
case 1: | Метками вариантов могут быть целые или символьные константы. Значение \1 совпадает с целым 1, так как в языке тип char автоматически приводится к int. |
while ( (c=input[++i]) !='\1' && c!='\0'); | Условие окончания цикла для оператора while есть или c=='\1', или конец строки. Каждый раз, когда проверяется условие оператора while, i увеличивается на 1, так что выполнение цикла приведет к тому, что i станет индексом символа из input, следующего за '\1' или за концом строки. |
i=12, c='\11' | Ничего не печатается. |
i=13, c='W' | Ничего не печатается. |
i=5, c='\1' | Оператор while завершается. |
case 9: putchar('S') | Операторы каждого варианта выполняются последовательно, один за другим; между ними нет никакого неявного оператора разрыва. За вариантом 1 следует вариант 9. Печатается S. |
case 'E': case'L': continue | За вариантом 9 следуют варианты 'E' и 'L'. |
for ( ; (c=input[15])!='\0'; i++ ) { | Опять возвращаемся назад к началу оператора for. |
в цикле for | |
i=15, c='W' | Печатается W. |
i=16, c='A' | Печатается A. |
i=17, c='L' | Ничего не печатается. |
i=18, c='L' | Ничего не печатается. |
i=19, c='M' | Печатается M. |
i=20, c='P' | Печатается P. |
i=20, c='1' | Печатается пробел. |
i=20, c='\0' | Завершается оператор for. |
putchar('\n') |