Cómo aplicar controles de bucle especiales en c ++

C ++ define dos comandos de control de flujo especiales conocidos como descanso y continuar. A veces, la condición para la terminación de un bucle se produce a ni el principio ni el final del bucle, pero en el medio. Considere un programa que se acumula el número de valores introducidos por el usuario. El bucle termina cuando el usuario introduce un número negativo.

El reto con este problema es que el programa no puede salir del bucle hasta que el usuario ha introducido un valor, sino que debe salir antes de que el valor se añade a la suma.

Para estos casos, C ++ define el descanso comandos. Cuando encontrado, el descanso causas el control al salir del bucle de corriente inmediatamente. El control pasa desde el descanso declaración a la declaración inmediatamente después de la abrazadera cerrada al final del bucle.

El formato de la descanso comandos es la siguiente:

while (condición) // romper trabajos igualmente bien en bucle {if (alguna otra condición) {// Break- salir del bucle}} // el control pasa aquí cuando el programa // se encuentra con el descanso

Armado con esta nueva descanso comando, una solución al problema acumulador aparece como el programa de BreakDemo:

// BreakDemo - Entrada de una serie de números .// Continuar para acumular la suma // de estos números hasta que el usuario // entra un número negativo # include. #include #include using namespace std-int main (int nNumberofArgs, char * pszArgs []) {// introducir el acumulador countint loop = 0-cout lt; lt; "Sumas valores de este programa desde el usuario n" lt; lt; "Terminar mediante la introducción de un número negativo" lt; lt; endl - // bucle "para siempre" para (-) {// se ha podido recuperar otra numberint nValue = 0-cout lt; lt; "Enter siguiente número:" cin >> nValue - // si es negativo ... si (nValue lt; 0) {// ... entonces exitbreak -} // ... añadir otro modo el número a la accumulatoraccumulator + = nValue -} // ahora que hemos salimos del bucle // salida del resultcout acumulada lt; lt; " nEl total es" lt; lt; accumulatorlt; lt; endl - // espera hasta que el usuario esté listo antes del programa // terminar para permitir al usuario ver el resultscout programa lt; lt; "Pulse Intro para continuar ..." lt; lt; endl-cin.ignore (10, ' n') - cin.get () - volver 0-}

Después de explicar las reglas para el usuario (introducir un número negativo para terminar y así sucesivamente), el programa entra en lo que parece ser un infinito para lazo. Una vez dentro del bucle, BreakDemo recupera un número desde el teclado. Sólo después de que el programa ha leído el número puede probar para ver si ese número coincide con los criterios de salida.

Si el número de entrada es negativo, el control pasa a la descanso, haciendo que el programa para salir del bucle. Si el número de entrada es no , saltos de control negativo sobre el descanso comando a la expresión que resume el nuevo valor en el acumulador. Después de que el programa sale del bucle, se emite el valor acumulado y luego se cierra.

Al realizar una operación sobre una variable repetidamente en un bucle, asegúrese de que la variable se inicializa adecuadamente antes de entrar en el bucle. En este caso, los ceros de programas acumulador antes de entrar en el bucle donde nValue se añade a la misma.

El resultado de un ejemplo de ejecución aparece como sigue:

Este programa resume los valores de la userTerminate introduciendo un numberEnter negativo siguiente número: 1Escriba el siguiente número: 2Escriba el siguiente número: 3Escriba el siguiente número: -1The total es 6Presione Intro para continuar ...

El parecido continuar comando se utiliza con menos frecuencia. Cuando el programa se encuentra con el continuar comando, inmediatamente se mueve de nuevo a la parte superior del bucle. El resto de los estados en el bucle se ignoran para la iteración actual.

El ejemplo siguiente fragmento ignora los números negativos que la entrada de fuerzas de usuario. Sólo un 0 termina esta versión (el programa completo aparece en la página web, ContinueDemo):

while (true) // esto mientras () tiene el mismo efecto que para (-) {// introducir un valuecout lt; lt; "Introducir un valor:" - cin >> nValue - // si el valor es negativo ... si (nValue lt; 0) {// ... mensaje de salida un error ... cout lt; lt; "Los números negativos no se les permite n" - // ... y volver a la parte superior de la loopcontinue -} // ... siguen para procesar la entrada como normal}



» » » » Cómo aplicar controles de bucle especiales en c ++