Тут где-то долго спорили о легитимности выхода из середины цикла.
Добавлю свои 5 копеек.
Я для книжки по системному программированию склепал несколько абстрактных машин.
В одной из них по аналогии с БЭСМ-6 система команд является одноадресной.
И по 2 команды в машинном слове размещается.
Основной цикл процессора (С++):
## Код:
```
while (true)
{   RM = mem[RA];         // выбрать слово
    RA = (RA + 1) % N;         // изменение адреса - по модулю 1024
    RC = RM.cmd.first;         // выбрать команду first
    run();               // выполнить команду 
    if (Error || stop) break;           // если команда stop или ошибка
    RC = RM.cmd.second;      // выбрать команду second
    run();               // выполнить команду
    if (Error || stop) break;           // если команда stop или ошибка
}
```

Небольшие пояснения.
Процессор выбирает слово с 2 командами в регистр RM
из регистра RM команда попадает в регистр команд.
В функции run анализируется код операции и команда исполняется.
Если это команда Stop или при выполнении были ошибки (Error = true), то процессор останавливается

С чисто программистской точки зрения - очень простой цикл, который можно написать, не очень заморачиваясь об инвариантах. Выход из середины смотрится нормально и естественно.
Если же писать условие окончания-продолжения в условии цикла, то вторая команда выполняется всегда.
А вот такой вариант:
## Код:
```
while (!Error & !stop)
{   RM = mem[RA];         // выбрать слово
    RA = (RA + 1) % N;         // изменение адреса - по модулю 1024
    RC = RM.cmd.first;         // выбрать команду first
    run();               // выполнить команду 
    if (Error || stop) break;           // если команда stop или ошибка
    RC = RM.cmd.second;      // выбрать команду second
    run();               // выполнить команду
}
```

мне нравится ГОРАЗДО меньше, поскольку условия выхода разные и еще в разных местах находятся.
Жаль, конечно, что в С++ нет цикла loop - он здесь бы очень подошел.
Выскажетесь, пожалуйста, по поводу приемлемости-неприемлемости такого рода циклов в обучении.
Еще хотелось бы об инварианте такого цикла что-нить увидеть.
Если кто предложит более подходящий вариант - возьму на вооружение.