условие do-while без объявления отдельной переменной - PullRequest
1 голос
/ 18 марта 2011

У меня есть цикл do-while внутри функции, которая похожа на что-то вроде этого:

do
{
    // a bunch of stuff
    if (something < something else)
    {
        return true;
    }
    else if (stuff > other stuff)
    {
        if (something != other stuff)
        {
             return false;
        }
        else
        {
              return true;
         }
     }
} while (condition);

Моя проблема здесь с condition в конце.Единственный способ отследить это - объявить булеву переменную перед циклом и установить для нее значение, соответствующее значению return, и проверять while() на это после каждой итерации.Хотя это сработало бы, мне это показалось довольно не элегантным, и мне было интересно, мог бы я вместо этого while() нажать на значение return.

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Непонятно, как выглядит ваше состояние.В любом случае, вам, вероятно, нужен бесконечный цикл:

for (; ;) {
    … your code here …
}

или:

while (true) {
    … your code here …
}

Этот цикл никогда не остановится сам по себе ... но поскольку вы выходите из него с помощью return, это не такпроблема.

1 голос
/ 18 марта 2011

Если ваш код неверен из-за того, что вы пытаетесь перефразировать его, это то, что вы должны сделать, чтобы удовлетворить ваши потребности возврата, равного while();

Для других этот код ниженеверная логика, но я пытаюсь сохранить ее в том же псевдокоде, который он использовал.В основном, если вы хотите, чтобы while имитировал возвращаемое значение, вам нужно ! возвращаемого значения, чтобы условие вышло.

do
{
    // a bunch of stuff
    if (something < something else)
    {
        return !condition;
    }
    else if (stuff > other stuff)
    {
        if (something != other stuff)
        {
             return condition;
        }
        else
        {
              return !condition;
        }
    }
} while (condition);
0 голосов
/ 18 марта 2011

Вы могли бы просто сказать

 do
{
    // a bunch of stuff
    if (something < something else)
    {
        return true;
    }
    else if (stuff > other stuff)
    {
        if (something != other stuff)
        {
             return false;
        }
        else
        {
              return true;
         }
     }
     else if(exit_condition)
      break;
} while (1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...