Vous êtes dans le cas de deux boucles croisées: aucune n'est imbriquée dans l'autre, les outils habituels de contrôle de flux sont donc insuffisants.
Beaucoup les modéliseront généralement avec des drapeaux booléens artificiels, ou dupliqueront une partie du code. Mais c'est en fait l'un des rares (et je veux dire très peu - réfléchir dur au préalable) cas d'utilisation de goto
.
Ignorant true
branche W2
», cela ressemble à une boucle simple while
:
I1;
while(!W1) {
I2;
if(W2)
/* ? */;
I3;
}
Maintenant, il suffit d'ajouter la branche manquante. L'étiquette, bien sûr, devrait être nommée adéquatement pour refléter votre logique de domaine réelle. Ajoutez des commentaires pour que tout soit clair et que vous soyez prêt.
// Let's W1 a stuff from our list of stuffs
handleNextStuff:
// Take a stuff
I1;
// Try W1'ing the stuff.
while(!W1) {
I2;
// No way we can W1 this stuff, drop it and try the next one.
if(W2)
goto handleNextStuff;
// A step closer to a W1'd stuff.
I3;
}
Maintenant, je comprends. Merci. :) –