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
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.
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);
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.
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.
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.
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;
.
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.
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.