Возможно ли иметь цикл while в c ++, который делает проверку в середине цикла вместо начала или конца?

StackOverflow https://stackoverflow.com/questions/1807110

Вопрос

Я хочу, чтобы цикл 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 нельзя поместить в середину цикла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top