Так что я некоторое время борется с этим, и я не понимаю, почему это работает.Вложенные операторы case в коммутаторе
int main(void)
{
int sum = 0;
for(int i = 0; i < 10; i++) {
switch(i) {
case 1: case 4: case 7: sum++;
default: continue;
case 5: break;
}
break;
}
printf("%d", sum);
}
Выход:
2
Я не смог найти какую-либо информацию о вложенных заявлениях дела в другом месте.
«Падение» - это ключевое слово для поиска. (Они на самом деле не «вложены», на самом деле их часто пишут * под * друг друга.) – Biffen
в стороне: получите привычку «ломать каждый» случай. в то время как ваш 'continue' означает, что вам это не нужно, вы можете в конечном итоге сделать что-то более неожиданное, чем падение случая, если вы его пропустите ... Цикл увеличивает' sum' на 'i = 1' и' i = 4' и останавливается на 'i = 5' ...' 0 + 1 + 1 == 2'. если вам не нужен условный поток, но необязательно требуется условное значение, LUT выполняется быстрее и проще: 'sum = 0; for (var i = 0; i <10; i ++) sum + = {1: 1,4: 2,7: 3} [i] || 0; ' – dandavis
Это префект возможность компилировать с помощью символов, запускать код внутри отладчика, чтобы трассировать программу по строке, проверяя значения соответствующих переменных, чтобы узнать, что действительно происходит. – alk