Domanda

Ho un ciclo do-while all'interno di una funzione che assomiglia a qualcosa del genere:

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);

Il mio problema qui è con il condition alla fine.L'unico modo in cui posso tenerne traccia sarebbe dichiarare una variabile booleana prima del ciclo e impostare il suo valore in modo che corrisponda al valore return e fare in modo che il while() lo controlli dopo ogni iterazione.Anche se questo funzionerebbe, mi sembra piuttosto inelegante e mi chiedevo se ci fosse un modo in cui avrei potuto fare in modo che while() attingesse al valore return invece.

È stato utile?

Soluzione

Supponendo che il tuo codice sia errato a causa del tuo tentativo di parafrasarlo, questo è ciò che dovresti fare per soddisfare le tue esigenze di ritorno essendo lo stesso del while();

Per altri, questo codice di seguito è una logica errata, ma sto cercando di mantenerlo nello pseudo codice simile che ha utilizzato.Fondamentalmente se vuoi che il tempo imiti il valore di ritorno, hai bisogno del ! del reso affinché la condizione esca.

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);

Altri suggerimenti

Non è chiaro come sia la tua condizione.Ad ogni modo, probabilmente vuoi un ciclo infinito:

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

oppure:

while (true) {
    … your code here …
}

Questo ciclo non si fermerà mai da solo ... ma dal momento che lo esci utilizzando return, questo non è un problema.

Potresti semplicemente dire

 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top