do-while état sans déclarer une variable distincte
-
27-10-2019 - |
Question
J'ai une boucle do-while dans une fonction qui ressemble à quelque chose comme ceci:
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);
Ma question est ici avec le condition
à la fin. La seule façon que je peux chose de garder une trace de ce serait de déclarer une variable booléenne avant la boucle, et l'ont mis de valeur pour correspondre à la valeur return
et ont le contrôle de while()
pour que, après chaque itération. Bien que cela fonctionnerait, il est semble plutôt inélégante pour moi et je me demandais s'il y avait une façon que je pouvais avoir le robinet de while()
dans la valeur return
à la place.
La solution
En supposant que votre code est incorrect en raison de vous essayer de paraphraser, c'est ce que vous devez faire pour répondre à vos besoins du retour étant le même que le while();
Pour d'autres, ce code ci-dessous est une logique incorrecte, mais je suis en train de le garder dans le code de pseudo similaire il a utilisé. En gros, si vous voulez que le temps pour mimer la valeur de retour, vous avez besoin du !
du retour pour que la condition de sortie.
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);
Autres conseils
Il est pas clair comment votre état ressemble. Quoi qu'il en soit, vous voulez probablement une boucle infinie:
for (; ;) {
… your code here …
}
ou
while (true) {
… your code here …
}
Cette boucle ne sera jamais arrêter par lui-même ... mais puisque vous sortez à l'aide return
ce n'est pas un problème.
Vous pouvez simplement 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);