Rechercher : dans
Par :

Boucles en C

Dernière réponse le 21 oct 2009 à 09:54:14 sarah, le 13 nov 2005 à 20:50:11 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « boucles en C » dans :
Langage C - Les structures conditionnelles Voir Qu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

1

mamiemando, le 14 nov 2005 à 01:52:49

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

Répondre à mamiemando

13

 mamiemando, le 21 oct 2009 à 09:54:14

Erratum :

Il fallait lire :

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

Répondre à mamiemando

2

sarah, le 14 nov 2005 à 10:43:40

D'accord , mais while permet de mettre des conditions comme if et else , pas for , non?

Répondre à sarah

3

pom, le 14 nov 2005 à 12:10:47

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

Répondre à pom

4

mamiemando, le 14 nov 2005 à 14:48:05

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

Répondre à mamiemando

5

sarah, le 14 nov 2005 à 15:06:37

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 :)

Répondre à sarah

6

mamiemando, le 14 nov 2005 à 15:52:38

char c;

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


plutôt.

Répondre à mamiemando

7

sarah, le 14 nov 2005 à 15:57:28

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;
}

Répondre à sarah

8

mamiemando, le 14 nov 2005 à 16:03:30

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

Répondre à mamiemando

9

sarah, le 14 nov 2005 à 17:41:54

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

Répondre à sarah

12

pom, le 15 nov 2005 à 14:29:37

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.

Répondre à pom

10

mamiemando, le 15 nov 2005 à 01:22:11

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.

Répondre à mamiemando

11

dje-dje, le 15 nov 2005 à 11:23:37

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

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres 

Répondre à dje-dje