Мой цикл do while выполняется только один раз

0

Я сделал пример кода в 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.

  • 0
    continue перепрыгивает через остальную часть тела цикла и повторно проверяет условие. У вас жестко задано значение false (после преобразования 0 в bool ). Учитывая, что другие случаи все равно break - выходя из цикла, вы можете вместо этого использовать while (true) (при условии, что ваш реальный код существенно отличается)
  • 0
    while (1); Пожалуйста.
Показать ещё 1 комментарий
Теги:
loops
while-loop
continue

3 ответа

4
Лучший ответ

while (0) означает, что он выпадет из нижней части цикла. Даже если вы continue условие переубеждается

  • 0
    Я проверил код сборки в Visual Studio того же кода и обнаружил, что в сборке нет оператора JMP для оператора продолжения внутри switch -case.
  • 0
    @kernel Если это последний случай, не нужно никуда прыгать.
Показать ещё 2 комментария
3

Когда вы continue внутри цикла do-while while, он прыгает при оценке внизу, что всегда является ложным в вашем случае.

1

Другие ответы объясняют continue но это выглядит из ваших комментариев, как вы понимаете, как это работает.

если значение я равно 3, тогда я хочу перезапустить цикл do while, который приведет к бесконечному циклу

Код функционирует так, как вы описали - он перескакивает на условие "while" на i==3. Единственное отличие состоит в том, что если вам нужен бесконечный цикл, вам нужно while(1) не в while(0).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню