Я сделал пример кода в c.
do
{
switch(i)
{
case 1:
{
cout<< "1\n";
break;
}
case 2:
{
cout<< "1\n";
break;
}
case 3:
{
continue;
}
}
}while (0);
Здесь в этом коде, если значение я равно 3, тогда я хочу перезапустить цикл do while, который приведет к бесконечному циклу. Но, к сожалению, цикл снова не выполняется. В чем причина этого? Я проверил код сборки в visual studio того же кода и обнаружил, что в сборке для оператора continue внутри переключателя -case нет инструкции JMP.
while (0)
означает, что он выпадет из нижней части цикла. Даже если вы continue
условие переубеждается
Когда вы continue
внутри цикла do-while
while, он прыгает при оценке внизу, что всегда является ложным в вашем случае.
Другие ответы объясняют continue
но это выглядит из ваших комментариев, как вы понимаете, как это работает.
если значение я равно 3, тогда я хочу перезапустить цикл do while, который приведет к бесконечному циклу
Код функционирует так, как вы описали - он перескакивает на условие "while" на i==3
. Единственное отличие состоит в том, что если вам нужен бесконечный цикл, вам нужно while(1)
не в while(0)
.
continue
перепрыгивает через остальную часть тела цикла и повторно проверяет условие. У вас жестко задано значениеfalse
(после преобразования0
вbool
). Учитывая, что другие случаи все равноbreak
- выходя из цикла, вы можете вместо этого использоватьwhile (true)
(при условии, что ваш реальный код существенно отличается)while (1);
Пожалуйста.