У меня есть этот кусок кода в C:C - код после включения в цикл игнорируется
for(int y = 1; y <= array_size; y++){ //outer loop starts here
for(int x = 1; x <= array_size; x++){ //inner loop starts here
switch(array[x][y]){
case 1: dosomething;
case 2: dosomething;
case 3: dosomething;
}
makestuff; //this line is ignored
} //inner loop ends here
outerloop; //outer loop - everything works fine
} //outer loop ends here
и, как вы можете увидеть, если я использую переключатель, код после него просто игнорируются, несмотря на это все еще находится в внутренний цикл.
Но если переписать код так:
for(int y = 1; y <= array_size; y++){ //outer loop starts here
for(int x = 1; x <= array_size; x++){ //inner loop starts here
if(array[x][y]==1)
dosomething;
else if(array[x][y]==2)
dosomething;
else if(array[x][y]==3)
dosomething;
makestuff; //works
} //inner loop ends here
outerloop; //outer loop - everything works fine
} //outer loop ends here
это работает, как я ожидал. Это не проблема, если бы я использовал второй метод, но я просто хотел бы знать, почему первый метод не работает.
Благодарим за ответы.
Пожалуйста, измените вопрос с кодом, который компилирует. – DeiDei
Трудно сказать, но что произойдет, если вы положите заявления 'break' после каждого' dosomething' –
Если эти блоки case заканчиваются 'break' и не содержат' continue' или переходов, они должны быть семантически эквивалентными if-else цепь внизу. https://ideone.com/daqyzN – PSkocik