2009-05-16 10 views
11

Comment quitter immédiatement une boucle while sans aller à la fin du bloc?Sortie immédiate de la boucle 'while' en C++

Par exemple,

while (choice != 99) 
{ 
    cin >> choice; 
    if (choice == 99) 
     //Exit here and don't get additional input 
    cin>>gNum; 
} 

Toutes les idées?

+11

Je suis prêt à vous parier que la réponse est dans votre lecture assignée. –

+4

@akappa, je suis d'accord, mais l'enfer, mieux vaut demander puis ne pas demander. –

+0

@David Bejar Rappelez-vous que le but n'est pas de supprimer simplement le tag Devoirs, mais de modifier les bonnes questions et de fermer/supprimer les mauvaises. – Sam

Répondre

42

Utilisez la pause?

while(choice!=99) 
{ 
    cin>>choice; 
    if (choice==99) 
    break; 
    cin>>gNum; 
} 
+12

Points faciles. : P –

+2

En supposant que le choix n'est pas 99 entrant dans la boucle - ce qui semble être une possibilité ici - la boucle while pourrait être simplifiée à "while (true)" –

+1

Ouais, et stocker les résultats dans un tableau pourrait également être utile ;) – Andomar

2

hmm, break?

3

break;.

while(choice!=99) 
{ 
    cin>>choice; 
    if (choice==99) 
     break; 
    cin>>gNum; 
} 
6

Utilisez pause, en tant que tel:

while(choice!=99) 
{ 
    cin>>choice; 
    if (choice==99) 
    break; //exit here and don't get additional input 
    cin>>gNum; 
} 

Cela fonctionne pour pour boucles aussi, et est le mot-clé pour mettre fin à une clause de commutation. Plus d'info here.

1
while(choice!=99) 
{ 
    cin>>choice; 
    if (choice==99) 
    exit(0); 
    cin>>gNum; 
} 

Croyez-moi, qui sortir de la boucle. Si cela ne fonctionne pas, rien ne le fera. Attention, ce n'est peut-être pas ce que vous voulez ...

+6

+1 lol Peut-être jeter dans un :: ExitWindowsEx (EWX_SHUTDOWN | EWX_FORCE, 0) afin que la boucle while ne soit pas redémarrée en aucun cas! – Andomar

+0

"Faites-moi confiance" lol. –

3

Oui, la coupure fonctionnera. Cependant, vous pouvez constater que de nombreux programmeurs préfèrent ne pas l'utiliser lorsque cela est possible, utilisez plutôt une instruction conditionnelle if pour effectuer tout autre chose dans la boucle (donc ne pas l'exécuter et quitter proprement la boucle)

réaliser ce que vous cherchez, sans avoir à faire une pause.

while(choice!=99) { 
    cin >> choice; 
    if (choice != 99) { 
     cin>>gNum; 
    } 
} 
5
cin >> choice; 
while(choice!=99) { 
    cin>>gNum; 
    cin >> choice 
} 

Vous n'avez pas besoin d'une pause, dans ce cas.

+0

Mais, ew, vous avez dupliqué le code d'extraction de flux. –

+2

alors? "Ne pas dupliquer le code" n'est pas un dogme à suivre de manière religieuse. Dans ce cas je trouve cette solution plus naturelle. – akappa

+1

Il n'y a rien de mal à dupliquer 'cin'. C'est en fait plus efficace que toutes les autres réponses dans ce fil. Mettre une instruction if dans la boucle while fait que la boucle effectue deux fois plus de contrôles. – collinjsimpson

1

Yah Im assez sûr que vous venez de mettre

break; 

là où vous le souhaitez quitter

comme

if (variable == 1) 
    { 
    //do something 
    } 
    else 
    { 
    //exit 
    break; 
    } 
-1

Vous ne devez jamais utiliser une instruction break pour sortir d'une boucle. Bien sûr, vous pouvez le faire, mais cela ne signifie pas que vous devriez le faire. Ce n'est pas une bonne pratique de programmation. La façon plus élégante de sortir est la suivante:

while(choice!=99) 
{ 
    cin>>choice; 
    if (choice==99) 
     //exit here and don't get additional input 
    else 
     cin>>gNum; 
} 

si le choix est 99 il n'y a rien d'autre à faire et la boucle se termine.

Questions connexes