Boucles en C

sarah -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
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

10 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
2
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Erratum :

Il fallait lire :

unsigned int i;
for(i=0;i<5;++i){
   printf("i=%d\n",i);
}
0
sarah
 
d'accord , mais while permet de mettre des conditions comme if et else , pas for , non?
0
pom
 
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...
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
0
sarah
 
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
char c;

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


plutôt.
0
sarah
 
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;
}
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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...
0
sarah
 
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...
0
pom
 
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.
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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.
0
dje-dje Messages postés 10417 Date d'inscription   Statut Modérateur Dernière intervention   758
 
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
0