Возможно ли иметь цикл while в c ++, который делает проверку в середине цикла вместо начала или конца?
-
05-07-2019 - |
Вопрос
Я хочу, чтобы цикл while делал что-то вроде следующего, но возможно ли это в c ++? Если да, как работает синтаксис?
do {
//some code
while( expression to be evaluated );
// some more code
}
Я бы хотел, чтобы цикл был завершен, как только оператор while решит, что выражение больше не является истинным (то есть, если выражение ложно, // какой-то еще код не выполняется)
Решение
Вы можете сделать:
while (1) {
//some code
if ( condition) {
break;
}
// some more code
}
Другие советы
Немного предыстории и анализа: то, что вы просите, я слышал, называется " Петля Даля , названная в честь Оле-Йохана Даля из Симулы. Как утверждает Шон Э., в C ++ их нет (кроме ответа ima), хотя некоторые другие языки есть (в частности, Ada). Это может занять место «сделай пока» и "while-do" петли, что делает его полезной конструкцией. В более общем случае допускается произвольное количество тестов. Хотя C ++ не имеет специального синтаксиса для циклов Даля, ответы Шона МакКолиффа и Арака полностью эквивалентны им. & Quot; пока (true) " цикл должен быть превращен компилятором в простой переход, поэтому скомпилированная версия полностью неотличима от скомпилированной версии гипотетического цикла Даля. Если вы найдете его более читабельным, вы также можете использовать
do {
...
} while (true);
Ну, я думаю, вы должны переместить условие в середину цикла (?):
while (true)
{
...
// Insert at favorite position
if (condition)
break;
...
}
Технически, да:
for ( ;CodeBefore, Condition; ) {CodeAfter}
Ответ - нет, вы не можете автоматически завершить цикл, когда условие, которое должен выполнять оператор while, является истинным до тех пор, пока он фактически не оценит его в верхней (или нижней) части цикла. Оператор while нельзя поместить в середину цикла.