É 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?

StackOverflow https://stackoverflow.com/questions/1807110

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)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top