2009-05-16 29 views
11

¿Cómo salgo de un bucle while inmediatamente sin ir al final del bloque?Salida inmediata del ciclo 'while' en C++

Por ejemplo,

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

¿Alguna idea?

+11

Estoy dispuesto a apostarle que la respuesta está en su lectura asignada. –

+4

@akappa, estoy de acuerdo, pero diablos, es mejor preguntar y no preguntar. –

+0

@David Bejar Recuerde que el objetivo no es simplemente eliminar la etiqueta de Tarea, sino editar las buenas preguntas y cerrar/eliminar las malas. – Sam

Respuesta

42

¿Utilizar el tiempo de descanso?

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

Puntos fáciles. : P –

+2

Suponiendo que la opción 99 no está ingresando al bucle, lo que parece ser una posibilidad aquí, el bucle while podría simplificarse a "while (true)" –

+1

Sí, y almacenar los resultados en una matriz también podría ser útil ;) – Andomar

2

hmm, break?

3

break;.

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

Uso ruptura, tales como:

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

Esto funciona para para bucles también, y es la palabra clave para poner fin a una cláusula de interruptor. Más información here.

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

Confía en mí, que salir del bucle. Si eso no funciona, nada lo hará. Tenga en cuenta, esto puede no ser lo que quiere ...

+6

+1 lol Tal vez lanzar en un :: ExitWindowsEx (EWX_SHUTDOWN | EWX_FORCE, 0) por lo que el ciclo while no se reinicia bajo ninguna circunstancia! – Andomar

+0

"Confía en mí", lol. –

3

Sí, el descanso funcionará. Sin embargo, puede encontrar que muchos programadores prefieren no usarlo cuando sea posible, sino que usan una sentencia if condicional para realizar cualquier otra cosa en el ciclo (por lo tanto, no realizarlo y salir del ciclo limpiamente)

Algo así logra lo que estás buscando, sin tener que utilizar un descanso.

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

No necesita un descanso, en ese caso.

+0

Pero, ew, duplicó el código de extracción de flujo. –

+2

entonces? "No duplicar el código" no es un dogma que debes seguir de manera religiosa. En este caso, encuentro que esta solución es más natural. – akappa

+1

No hay nada de malo en duplicar 'cin'. En realidad es más eficiente que todas las otras respuestas en este hilo. Al colocar una instrucción if dentro del ciclo while, el ciclo realiza el doble de verificaciones. – collinjsimpson

1

Yah Im bastante seguro de que acaba de poner

break; 

justo donde quieres que salga

como

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

Nunca se debe utilizar una instrucción break para salir de un bucle. Por supuesto que puede hacerlo, pero eso no significa que deba hacerlo. Simplemente no es una buena práctica de programación. La forma más elegante de salir es el siguiente:

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

si la elección es del 99 no hay nada más que hacer y el bucle termina.

Cuestiones relacionadas