Posez votre question Signaler

Boucles en C

sarah - Dernière réponse le 21 oct. 2009 à 09:54
Bonsoir , j'aimerais savoir quelles sont les différences entre les boucles for et les boucles while en C , et dans quel cas mieux faut utiliser l'un que l'autre ?
merci
Lire la suite 

Boucles en C »

13 réponses
Réponse
+0
moins plus
for c'est plus général que while :

while(c){ } <=> for(;c;)

La première instruction du for est l'initialisation, la seconde la condition d'arrêt (c) comme dans un while, et la troisième l'instruction à exécuter en fin de boucle.

Personnellement je n'utilise presque jamais while puisque comme tu le vois tu peux otut faire avec un for, mais parfois un while est plus "lisible".

Le for permet d'alléger consdérablement le code : les deux codes suivants sont equivalents

unsigned int i;
i=0;
while(i<5){
   printf("i=%d\n",i);
   ++i;
}

//-------------

unsigned int i;
for(i=0;i<5;++i;){
   printf("i=%d\n",i);
}


Remarque de mamie :

l'instruction "vide" valant 1, tu peux utiliser une condition d'arret vide ! Ainsi while(1) <=> while() <=> for(;;) (boucle infinie, que tu interrompt avec un break). Et ceci permet d'introduire la remarque droïde qui dit que sur le papier c'est équivalent, mais à la compilation le for(;;) est plus rapide... Comme quoi on n'est jamais au bout de ses surprises ^^

Bonne chance
mamiemando - 21 oct. 2009 à 09:54
Erratum :

Il fallait lire :

unsigned int i;
for(i=0;i<5;++i){
   printf("i=%d\n",i);
}
Ajouter un commentaire
Réponse
+0
moins plus
d'accord , mais while permet de mettre des conditions comme if et else , pas for , non?
pom - 14 nov. 2005 à 12:10
Salut, non pas du tout, tu peux mettre des if dans les while et les for

for(i=0;i<5;++i)
if(i==2) printf("toto\n");
else printf("tata\n");

i=0;
while(i<5)
{
if(i==2) printf("toto\n");
else printf("tata\n");
++i;
}


je peux aussi faire (mais vraiment illisible)
for(i=0;i<5;if(i==2) printf("toto\n"); else printf("tata\n"); ++i;);


regarde bien le code précédent : je mis un ; après mon for, mais tu vois bien que c'est illisible.

pour ma part : j'utilise un for quand je connais le nombre d'itérations maximale et un while quand je ne le connais pas (par exemple, je parcours tous les éléments d'un tableau et je sors dès que l'élément vaut -1), mais tu vois que for et while sont vraiment liées.

J'espère que j'ai été clair...
Ajouter un commentaire
Réponse
+0
moins plus
while(c) <=> for(;c;)

Partant de la tout ce que peut faire un while tu peux toujours le faire avec un for. Sauf qu'en plus, for c'est plus rapide une fois compilé.

Bonne chance
Ajouter un commentaire
Réponse
+0
moins plus
voici un code que j'ai fait avec while , il marche parfaitement :

char c = 'a';

while ( c <= 'z' )
{
if ( c % 2 == 0 )
putchar(c);
if ( c % 2 != 0 )
putchar ( c - 32 );
++c;
}


j'essaye de le recoder avec for , vous me direz si j'ai bon :

char c = 'a';

for ( c = 'a'; c <= 'z'; ++c)
if ( c % 2 == 0 )
putchar(c);
if ( c % 2 != 0 )
putchar ( c - 32 );


bon là j'ai pas vraiment gagné en terme de lisibilité , while et for sont égaux sur ce coup :)
Ajouter un commentaire
Réponse
+0
moins plus
char c;

for ( c = 'a'; c <= 'z'; ++c){
  if (c%2==0) putchar(c);
  else        putchar (c-32);
}


plutôt.
Ajouter un commentaire
Réponse
+0
moins plus
alors autant faire pareil avec le while , et dans ce cas il n'y a aucun avantage , ni dans l'un , ni dans l'autre :

char c = 'a';

while ( c <= 'z' )
{
if ( c % 2 == 0 )
putchar(c);
else
putchar ( c - 32 );
++c;
}
Ajouter un commentaire
Réponse
+0
moins plus
C'est une question de présentation ça ne va pas plus loin. En fait je ne sais pas si ca marche en C (mais ca marche en c++), tu devrais écrire :
for (char c = 'a'; c <= 'z'; ++c){
  if (c%2==0) putchar(c);
  else        putchar(c-32);
}

Car la portée de la variable c serait l'horizon délimité par les { } de la boucle for. Chose que tu ne pourrais pas faire avec un while...
Ajouter un commentaire
Réponse
+0
moins plus
oui mais non faut pas commencer à m'embrouiller avec le C++ svp , restons dans le C , et à ce que je sache en C on ne met pas d'accolades avec le for...
pom - 15 nov. 2005 à 14:29
Salut Sarah, les accolades servent à faire plusieurs instructions. Si tu fais

for(blabla)
instruction 1;
instruction 2;
...
instruction n

SEULE la 1e instruction sera exécutée dans le for. Si tu fais

for(blabla)
{
instruction 1;
instruction 2;
...
instruction n
}

TOUTES les instructions seront exécutées dans le for.
Ce qui est vrai pour le for est vrai pour le while, le if, le else.

Remarque : l'instructin if... else... n'est qu'une seule instruction.

for(blabla)
if i>5
blabla1;
else blabla2;

ici il n'y a qu'une seule instruction.
Ajouter un commentaire
Réponse
+0
moins plus
Si, bien sûr que si. En C comme en C++ pas de problème. C'est juste la déclaration dans le for qui ne doit pas marcher en C.
Ajouter un commentaire
Réponse
+0
moins plus
For et while marche pareil en C et en C++
Ce sont deux "structures" equivalentes et on peut toujours utiliser l'une à la place de l'autre. Je ne suis pas certain que le for fasse gagner du temps à la compilation mais je n'affirmerai rien, j'en sais rien !

J'utilise le for qd j'ai besoin d'initialiser une variable au debut de la boucle
(Genre le compteur de la dite boucle)

a+
dje-dje
Ajouter un commentaire
Ce document intitulé « boucles en C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook