web-dev-qa-db-fra.com

Simple boucle while en utilisant while (true);

Plusieurs fois dans les exemples de programmes C, je suis tombé sur ce type de boucles. Que font vraiment ce genre de boucles? 

do {

    while (...) // Check some condition if it is true.
    { 
        calculation 1
    }

    // Some new condition is checked.

} while(true);

Quel est le besoin de while(true); Est-il utilisé pour une boucle infinie? Quelqu'un peut-il s'il vous plaît expliquer ce que la boucle ci-dessus fait vraiment. Je suis nouveau en programmation C

10
Dev

Ces boucles sont utilisées quand on veut boucler à jamais et que la condition de rupture de boucle n'est pas connue. Les conditions Certiain sont définies dans la boucle avec les instructions break ou return qui doivent sortir de la boucle. Par exemple:

while(true){
    //run this code
    if(condition satisfies)
        break;    //return;
}

Ces boucles sont comme toute autre boucle while avec condition pour arrêter la boucle est dans le corps de la boucle while, sinon elle sera exécutée pour toujours (ce qui n’est jamais l’intention d’une partie du code jusqu’à ce que cela soit nécessaire). Cela dépend de la logique du programmeur uniquement de ce qu'il/elle veut faire.

6
Sargam Modak

oui, il est utilisé pour une boucle infinie, dans ce cas, la meilleure pratique consiste à ne pas regarder dans les conditions

do {

    while () //check some condition if it is true
     { 
     calculation 1
    }

    //some  new condition is checked,if condition met then break out of loop


    } while(true);
1
Cris
do {
  // code here
} while(true);

Cette boucle s'exécute indéfiniment et peut aboutir à une exécution erorr si elle n'est pas arrêtée. Si vous utilisez ce type de boucle, veillez à insérer une instruction break afin de s’assurer que votre boucle s’arrêtera à un moment donné.

Semblable à cela

if(condition)
   break;

Si votre programme a atteint un point où la condition est vraie, il mettra automatiquement fin à la boucle do-while et procédera au code par la suite.

0
krato

En C, toutes les boucles sont en boucle lorsqu'une condition est vraie. Donc, une variable true explicite dans la condition signifie réellement "boucle alors que la variable true est vraie" et ainsi bouclera pour toujours.

0
Some programmer dude

Cette boucle est infinie et si vous voulez que votre programme se termine avec un tel lop, vous devez avoir une instruction break ou return (ou, dans certains cas, une exception) sous une condition donnée dans une telle boucle, sinon ce programme ne se terminera jamais.

0
Ivaylo Strandjev

Une boucle infinie est utile si la vérification de la condition d'arrêt ne peut être effectuée ni devant (comme avec for et while) ni à l'arrière (comme avec do{}while). Au lieu de cela, vous faites une boucle infinie et au milieu du code, vous pouvez vérifier une condition et rompre: if(something) break;.

0
Bernd Elkemann

parfois on l'utilise par exemple:

do
     recv(s , &buf, len, flags);
while(true)

un exemple de l’application Windows de Windows windows, vous pouvez ainsi écouter à partir d’un port.

0
La VloZ

Le facteur de différenciation général entre les boucles suivantes:

while (condition) {action}
do {action} while (condition)

est que le premier est utilisé pour les boucles qui se produisent zéro ou plusieurs fois tandis que le dernier est pour les boucles qui se produisent un ou plus de temps.

En d'autres termes, la condition pour while est vérifiée au début de la boucle et pour do while, elle est vérifiée à la fin.

Souvent, vous verrez du code où les développeurs ne semblent pas savoir à propos de do-while dans le sens où ils écrivent:

result = doSomething();
while (result == NOT_FINISHED) {
    result = doSomething();
}

qui pourrait être mieux écrit comme:

do {
    result = doSomething();
} while (result == NOT_FINISHED);

Cependant, dans votre cas spécifique où la condition est toujours true, cela n'a pas vraiment d'importance. Les boucles suivantes sont fondamentalement équivalentes (en utilisant 1 pour le cas réel):

for (;;) { doSomething(); }
for (;;doSomething());

while (1) { doSomething(); }
do { doSomething(); } while (1);

while (doSomething(),1);

BADPAX: doSomething(); goto BADPAX;

La première boucle for est probablement la manière canonique de créer une boucle infinie, en tirant parti du fait que, si vous omettez la condition de continuation de la boucle, elle est supposée toujours vraie.

La deuxième boucle for déplace simplement le corps de la boucle dans la partie per-itération de l'instruction for.

La première while est aussi parfois vue à l'état sauvage, le do-while probablement moins. La seule différence ici est que les premières boucles vérifient en permanence en haut de la boucle, les dernières en boucle vérifiant en permanence en bas de la boucle.

La dernière boucle while utilise l'opérateur de virgule C d'une manière que vous ne devriez probablement jamais :-)

Ce dernier est très rare de nos jours, mais c'est probablement ce qu'ils optimisent tous jusqu'au niveau du code machine.

0
paxdiablo