2009-05-16 14 views
11

Come si esce immediatamente da un ciclo while senza passare alla fine del blocco?Uscita immediata del ciclo 'while' in C++

Per esempio,

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

Tutte le idee?

+11

Sono disposto a scommettere che la risposta è nella lettura assegnata. –

+4

@akappa, sarei d'accordo, ma diavolo, meglio chiedere quindi non chiedere. –

+0

@David Bejar Ricorda che l'obiettivo non è solo rimuovere il tag Homework, ma modificare le buone domande e chiudere/eliminare quelle sbagliate. – Sam

risposta

42

Utilizzare pausa?

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

Punti facili. : P –

+2

Supponendo che la scelta non sia 99 entrare nel ciclo - che sembra essere una possibilità qui - il ciclo while potrebbe essere semplificato a "while (true)" –

+1

Sì, e memorizzare i risultati in un array potrebbe anche essere utile ;) – Andomar

2

hmm, break?

3

break;.

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

Usa pausa, come ad esempio:

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

Questo funziona per per loop anche, ed è la parola chiave per porre fine una clausola di interruttore. Maggiori informazioni here.

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

Fidati di me, che uscirà il ciclo. Se quello non funziona niente lo farà. Attenzione, questo potrebbe non essere quello che vuoi ...

+6

+1 lol Forse gettare in un :: ExitWindowsEx (EWX_SHUTDOWN | EWX_FORCE, 0) in modo che il ciclo while non venga riavviato in nessun caso! – Andomar

+0

"Fidati di me" lol. –

3

Sì, la pausa funzionerà. Tuttavia, potreste scoprire che molti programmatori preferiscono non usarlo quando possibile, piuttosto usare un'istruzione condizionale if per eseguire qualsiasi altra cosa nel ciclo (quindi, non eseguirlo ed uscire dal ciclo pulito)

Qualcosa come questo sarà raggiungere ciò che stai cercando, senza dover usare una pausa.

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

Non avete bisogno di una pausa, in quel caso.

+0

Ma, ew, hai duplicato il codice di estrazione del flusso. –

+2

quindi? "Non duplicare il codice" non è un dogma da seguire in modo religioso. In questo caso trovo questa soluzione più naturale. – akappa

+1

Non c'è niente di sbagliato con la duplicazione di "cin". In realtà è più efficiente di tutte le altre risposte in questo thread. Mettere un'istruzione if all'interno del ciclo while fa sì che il ciclo esegua il doppio dei controlli. – collinjsimpson

1

Yah Im abbastanza sicuro che hai appena messo

break; 

proprio dove si vuole uscire

come

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

si dovrebbe mai usare un'istruzione break per uscire da un ciclo. Certo che puoi farlo, ma questo non significa che dovresti. Non è una buona pratica di programmazione. Il modo più elegante per uscire è il seguente:

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

se la scelta è del 99 non c'è niente altro da fare e il ciclo termina.