Boucles en C

Fermé
sarah - 13 nov. 2005 à 20:50
mamiemando Messages postés 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 - 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

10 réponses

mamiemando Messages postés 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 7 801
14 nov. 2005 à 01:52
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 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 7 801
21 oct. 2009 à 09:54
Erratum :

Il fallait lire :

unsigned int i;
for(i=0;i<5;++i){
   printf("i=%d\n",i);
}
0
d'accord , mais while permet de mettre des conditions comme if et else , pas for , non?
0
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 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 7 801
14 nov. 2005 à 14:48
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
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 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 7 801
14 nov. 2005 à 15:52
char c;

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


plutôt.
0
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 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 7 801
14 nov. 2005 à 16:03
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
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
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 33335 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 5 novembre 2024 7 801
15 nov. 2005 à 01:22
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 mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 758
15 nov. 2005 à 11:23
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