condizione do-while senza dichiarare una variabile separata
-
27-10-2019 - |
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.
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);