Como aplicar controles de loop especial em C ++

C ++ define dois comandos especiais de controle de fluxo conhecidas como pausa e continuar. Às vezes a condição para que encerra um circuito ocorre em nem o começo nem o fim do ciclo, mas no meio. Considere um programa que se acumula número de valores inseridos pelo usuário. O loop termina quando o usuário insere um número negativo.

O desafio com este problema é que o programa não pode sair do loop até que o usuário inseriu um valor, mas deve sair antes que o valor é adicionado à soma.

Para estes casos, C ++ define o pausa comando. Quando encontrado, o pausa causas controlar para sair do loop de corrente imediatamente. O controlo passa do pausa declaração à instrução imediatamente após a cinta fechada no final do ciclo.

O formato do pausa comandos é como segue:

while (condição) // quebrar funciona igualmente bem em loop {if (alguma outra condição) {// Desagrega- ção sair do loop}} // controle passa aqui quando o programa // encontra o intervalo

Armado com este novo pausa de comando, uma solução para o problema acumulador aparece como o programa BreakDemo:

// BreakDemo - introduzir uma série de numbers.// continuar a acumular a soma // destes números até que o usuário // entra um número negativo # incluir. #incluir #incluir usando namespace std-int main (int nNumberofArgs, char * pszArgs []) {// entrada do acumulador de loop countint = 0-cout lt; lt; "Este programa somas valores do utilizador n" lt; lt; "Terminar inserindo um número negativo" lt; lt; endl - // faz um loop "para sempre" para (-) {// buscar outra numberint nValue = 0-cout lt; lt; "Enter próximo número:" CIN II-III >> nValue - // se for negativo ... if (nValue lt; 0) {// ... então exitbreak -} // ... caso contrário, adicionar o número à accumulatoraccumulator + = nValue -} // agora que já saiu do loop // saída do resultcout acumulada lt; lt; " NO total é de" lt; lt; accumulatorlt; lt; endl - // espera até que o usuário está pronto antes de terminar o programa // para permitir que o usuário veja o resultscout programa lt; lt; "Pressione Enter para continuar ..." lt; lt; endl-cin.ignore (10, ' n') - cin.get () - retornar 0-}

Depois de explicar as regras para o utilizador (digitando um número negativo para terminar e assim por diante), o programa entra no que parece uma infinita para loop. Uma vez dentro do circuito, BreakDemo recupera um número a partir do teclado. Só depois que o programa tenha lido o número pode-lo testar para ver se esse número corresponde aos critérios de saída.

Se o número de entrada é negativo, o controlo passa para o pausa, fazendo com que o programa para sair do ciclo. Se o número de entrada é não , baldes de controlo negativo sobre a pausa comandar a expressão que resume o novo valor para o acumulador. Depois que o programa sai do loop, ele gera o valor acumulado e, em seguida, sai.

Ao executar uma operação em uma variável repetidamente em um loop, certifique-se de que a variável é inicializada adequadamente antes de entrar no loop. Neste caso, os zeros programa acumulador antes de entrar no circuito fechado onde nValue é adicionado a ele.

O resultado de um exemplo de execução será exibida como segue:

Este programa resume valores da userTerminate inserindo um numberEnter negativo próximo número: 1Digite o próximo número: 2Digite o próximo número: 3Digite o próximo número: -1The total é 6Pressione Enter para continuar ...

o semelhante continuar comando é usado com menos frequência. Quando o programa encontrar o continuar de comando, ele move-se imediatamente de volta para o topo do laço. O restante das instruções no loop são ignorados para a iteração atual.

O seguinte exemplo de trecho ignora os números negativos que a entrada do usuário poder. Apenas um 0 termina esta versão (o programa completo aparece no site como ContinueDemo):

while (true) // este while () tem o mesmo efeito como para (-) {// inserir um valuecout lt; lt; "Introduza um valor:" - cin >> nValue - // se o valor for negativo ... if (nValue lt; 0) {// ... mensagem de saída um erro ... cout lt; lt; "Os números negativos não são permitidos n" - // ... e voltar para o topo da loopcontinue -} // ... continuar a processar a entrada como o normal}

menu