Разобраться с программой со Switch - C (СИ)
Формулировка задачи:
Здравствуйте. Не могу понять,как работает программа. Был бы рад,если бы кто-то объяснил,что при выборе каждого элемента будет происходить..
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,c;
char input[]="tratata2\3\141ZW\1hopa";
for(i=2;(c=input[i])!='\0';i++)
{
switch(c) {
case 'a': putchar('i'); continue;
case '2': break;
case 1:
case 3 : putchar('A');break;
case 141 : putchar('B');
case 'E': case 'K' : continue;
default : putchar(c); continue;
}
putchar('_');
}
putchar('\n');
getchar();
}Решение задачи: «Разобраться с программой со Switch»
textual
Листинг программы
for(i=0;(c=input[i])!='\0';i++)
{
switch(c) {
case 'a': putchar('i'); continue;// если считывается символ 'a', т.е. коды совпали, то выводит 'i' и проскакиваются оставшиеся операторы цикла
case '2': break;// если с читывается '2' то происходит прерывание работы switch
case 1:// если считывается 1, то срабатывает case 3 , выводится 'A',происходит прерывание работы switch, и вывод '_'
case 3 : putchar('A');break;// если считывается 3, то выводится 'A'
case 141 : putchar('B');// если полученный символ есть 'H', то выводится 'B'
case 'E': case 'K' : continue;// если получаем 'E' или 'K' то просто проскакиваем итерацию
default : putchar(c); continue;// если ввели что то, отличное от того, что ранее описано, то выводим полученный символ на экран и проскакиваем операторы, расположенные ниже
}
putchar('_');//сюда добераемся только в случае, если попали в ветвь с break
}
Объяснение кода листинга программы
for(i=0;(c=input[i])!='\0';i++)- это цикл, который читает символы из входного массиваinputдо тех пор, пока не встретит символ '\0'. Переменнаяiиспользуется для отслеживания индекса текущего символа, аc- для хранения текущего символа.switch(c) {- это операторswitch, который проверяет, какой код соответствует текущему символуc.case 'a': putchar('i'); continue;- если текущий символcравен 'a', то выводится символ 'i' и выполнение программы переходит к следующей итерации цикла (за счет оператораcontinue).case '2': break;- если текущий символcравен '2', то выполнение программы прерывается и переходит к следующей итерации цикла (за счет оператораbreak).case 1: putchar('A'); break;- если текущий символcравен 1, то выводится символ 'A' и выполнение программы прерывается и переходит к следующей итерации цикла (за счет оператораbreak).case 141: putchar('B');- если текущий символcравен 141 (или 'B'), то выводится символ 'B'.case 'E': case 'K': continue;- если текущий символcравен 'E' или 'K', то выполнение программы прерывается и переходит к следующей итерации цикла (за счет оператораcontinue).default: putchar(c); continue;- если текущий символcне соответствует ни одному из предыдущих случаев, то он выводится на экран и выполнение программы прерывается и переходит к следующей итерации цикла (за счет оператораcontinue).putchar('_');- выводится символ '_'. Это происходит только в том случае, если выполнение программы достигло оператораbreak. Пожалуйста, обратите внимание, что порядок и количество элементов в списке могут быть изменены в зависимости от конкретного ввода.