Как всегда 👍 за видео. Но как мне кажется, было бы проще (и понятнее) объяснить почему именно так работает switch, если перед этим рассказать про goto и метки. И как вытекающие из сказанного, можно было рассказать, почему после case допускается не использовать объединение инструкций в блоки {}, и почему в таком случае нельзя после case объявить переменную.
Частая ошибка начинающих - забывать break. Почти всегда в ветви switch нужен break, и редко, когда нет. Например, в языке Go есть похожий по синтаксису switch, но break там не нужен, он подразумевается автоматически. Также, в языке Паскаль есть похожий оператор case-of , в котором каждая ветвь заканчивается сразу, без использования break. Кроме того, в Паскале можно в качестве селектора указать еще и диапазон, а не просто одну константу. В Си в этом случае приходится либо перечислять все значения диапазона ... case 2: case 3: case 4: case 5: ... либо использовать вложенные if вместо switch.
у меня возник вопрос. Почему нужно прописывать break после каждого case, если он и так после выбора варианта 3 в данном примере должен, казалось бы, перейти сразу к return?
Можете пожалуйста подсказать, почему при использовании в case еще одного оператора switch программа может выполнять не то, что нужно или вызывать ошибки. Можно ли это исправить и как лучше все таки писать, чтобы например кейс вызывал еще один интерфейс, в котором также реализован выбор каких-либо действий
Вложенные switch - очень плохая практика. Лучше вызывайте их через функции, если уж очень нужно. Но и вложенный должен работать. Если что то не так, значит, где то ошибка.
Зачем это нужно вообще, использую всегда череду if() {} это и гибче и понятнее...Я бы понят если бы компилятор не сравнивал каждый вариант, а просто прирастил счётчик и сразу ушёл на нужное место, одним цикломпроцессора, но так оно не работает...
В этой программе проверка функции scanf бесполезна при любых значениях она игнорируется что угодно можно ввести и она это пропустит и только switch выдаст ошибку если не будет нужного символа int main(void) { char item ; if(scanf("%c",&item)!=1){ printf("Error!!! "); return 0; } switch (item) { case 'a': case 'A': printf("simvol A "); break; case 'b': case 'B': printf("simvol B "); break; case 'c': case 'C': printf("simvol C "); break; case 'd': case 'D': printf("simvol D "); break; default: printf("Error!!!! "); break; } return 0; }
круто, спасибо большое за уроки, знания должны быть доступны для всех!
Сергей, у вас очень хорошие и понятные видео, успехов вам в дальнейшем!!!
Спасибо за ваши видео! В них всё объяснено очень доходчиво.
Доброе время суток ! Спасибо очень интересно и доступно!
круть, лучший курс на ютубе
Спасибо. Удивительно!
Как всегда 👍 за видео. Но как мне кажется, было бы проще (и понятнее) объяснить почему именно так работает switch, если перед этим рассказать про goto и метки. И как вытекающие из сказанного, можно было рассказать, почему после case допускается не использовать объединение инструкций в блоки {}, и почему в таком случае нельзя после case объявить переменную.
Спасибо. Очень доступно объяснили.
Спасибо за подробное объяснение!
спасибо!👏👍
Частая ошибка начинающих - забывать break. Почти всегда в ветви switch нужен break, и редко, когда нет. Например, в языке Go есть похожий по синтаксису switch, но break там не нужен, он подразумевается автоматически. Также, в языке Паскаль есть похожий оператор case-of , в котором каждая ветвь заканчивается сразу, без использования break. Кроме того, в Паскале можно в качестве селектора указать еще и диапазон, а не просто одну константу. В Си в этом случае приходится либо перечислять все значения диапазона
...
case 2: case 3: case 4: case 5:
...
либо использовать вложенные if вместо switch.
👍
Так можно?
define BUTTON_1 1
switch(BUTTON_1)
{
case BUTTON_1:
break;
}
Можно, только смысл? )
у меня возник вопрос. Почему нужно прописывать break после каждого case, если он и так после выбора варианта 3 в данном примере должен, казалось бы, перейти сразу к return?
нет, он продолжает просматривать остальные, если нет break
33 строка, если break не писать, все равно все сработает, или так нельзя?
Добрый день! Как понять когда switch , а когда if ?
Очень просто, если есть множество константных вариантов, то можно подумать о switch, иначе только if.
@@selfedu_rus если переменные, то однозначно if, а константы switch. Все понял спасибо
Можете пожалуйста подсказать, почему при использовании в case еще одного оператора switch программа может выполнять не то, что нужно или вызывать ошибки. Можно ли это исправить и как лучше все таки писать, чтобы например кейс вызывал еще один интерфейс, в котором также реализован выбор каких-либо действий
Вложенные switch - очень плохая практика. Лучше вызывайте их через функции, если уж очень нужно. Но и вложенный должен работать. Если что то не так, значит, где то ошибка.
Зачем это нужно вообще, использую всегда череду if() {} это и гибче и понятнее...Я бы понят если бы компилятор не сравнивал каждый вариант, а просто прирастил счётчик и сразу ушёл на нужное место, одним цикломпроцессора, но так оно не работает...
В этой программе проверка функции scanf бесполезна при любых значениях она игнорируется что угодно можно ввести и она это пропустит и только switch выдаст ошибку если не будет нужного символа
int main(void)
{
char item ;
if(scanf("%c",&item)!=1){
printf("Error!!!
");
return 0;
}
switch (item)
{
case 'a':
case 'A':
printf("simvol A
");
break;
case 'b':
case 'B':
printf("simvol B
");
break;
case 'c':
case 'C':
printf("simvol C
");
break;
case 'd':
case 'D':
printf("simvol D
");
break;
default:
printf("Error!!!!
");
break;
}
return 0;
}
Зачем вводить бесполезную проверку scanf, которая не работает?
Добрый день! Как определить когда switch, а когда if?