É possível ter um loop while em C ++ que faz o check-in no meio do ciclo, em vez de no início ou no fim?
-
05-07-2019 - |
Pergunta
Eu quero ter um loop while fazer algo como o seguinte, mas isso é possível em C ++? Se assim for, como é que o movimento sintaxe?
do {
//some code
while( expression to be evaluated );
// some more code
}
Eu gostaria que o loop para ser encerrado assim que o while decide a expressão não é mais verdade (ou seja, se a expressão é falsa, // mais algum código não é executado)
Solução
Você pode fazer:
while (1) {
//some code
if ( condition) {
break;
}
// some more code
}
Outras dicas
Um fundo pouco e análise: o que você está pedindo que eu ouvi chamado de " Dahl circuito ", em homenagem a Ole-Johan Dahl de Simula fama. Como Sean E. estados, C ++ não tê-los (a resposta de ima de lado), embora algumas outras línguas fazer (nomeadamente, Ada). Ele pode tomar o lugar de "do-while" e "enquanto-fazer" loops, o que o torna uma construção útil. O caso mais geral permite para um número arbitrário de testes. Enquanto C ++ não tem sintaxe especial para laços Dahl, Sean McCauliff e respostas de Arak são completamente equivalentes a eles. O "while (true)" loop deve ser transformado em um salto simples pelo compilador, então a versão compilada é completamente indistinguível de uma versão compilada de um loop Dahl hipotética. Se você encontrá-lo mais legível, você também pode usar um
do {
...
} while (true);
Bem, eu acho que você deve mover-se a condição para o meio do circuito (?):
while (true)
{
...
// Insert at favorite position
if (condition)
break;
...
}
Tecnicamente, sim:
for ( ;CodeBefore, Condition; ) {CodeAfter}
A resposta é não, você não pode ter o seu ciclo termina automaticamente quando a condição que o while é suposto avaliar é verdade até que ele realmente avalia-lo no topo (ou inferior) do loop. O while não pode ser colocado no meio do circuito.