Problème très bizarre avec la boucle for (C)
Résolu
e-proton
Messages postés
81
Date d'inscription
Statut
Membre
Dernière intervention
-
e-proton Messages postés 81 Date d'inscription Statut Membre Dernière intervention -
e-proton Messages postés 81 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Problème très bizarre avec la boucle for (C)
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
5 réponses
J'ai juste regardé ton premier code. Et il n'y a aucun problème.
Première boucle for :
Tu mets la variable "a" à 0. b vaut 20.
La condition de fin de la boucle est b>10 et dans le corps on a la décrémentation de b.
La boucle aura donc 10 itérations. A la fin de la boucle b vaudra 10 (10>10 renvoie faux) et a vaudra 10.
deuxième boucle for :
Tu remets la variable "a" à 0. b vaut toujours 10.
La première condition b<10 échoue. Donc aucune itération.
La variable "a" reste donc à 0. Donc pas d'entourloupe de la part du compilateur ;)
Cdlt
#include <stdio.h> #include <stdlib.h> int main(void) { long a,b=20; for (a=0;b>10;a++) { b--; } for (a=0;b<10;a--) { b++; } printf("%ld",a); return (EXIT_SUCCESS); }
Première boucle for :
Tu mets la variable "a" à 0. b vaut 20.
La condition de fin de la boucle est b>10 et dans le corps on a la décrémentation de b.
La boucle aura donc 10 itérations. A la fin de la boucle b vaudra 10 (10>10 renvoie faux) et a vaudra 10.
deuxième boucle for :
Tu remets la variable "a" à 0. b vaut toujours 10.
La première condition b<10 échoue. Donc aucune itération.
La variable "a" reste donc à 0. Donc pas d'entourloupe de la part du compilateur ;)
Cdlt
comme dit fiddy, c'est logique !
Le problème viens de ton algorithme pas du compilateur.
Enfin, d'un autre coté j'ai aussi remarqué un comportement étrange des boucles for lorsque je commence avec une condition fausse. (i.e. : for(a=0;a<0;a++))
Dans ton cas, je pense qu'une boucle while serait plus clair.
dit nous plutôt quel résultat tu espère avoir.
Le problème viens de ton algorithme pas du compilateur.
Enfin, d'un autre coté j'ai aussi remarqué un comportement étrange des boucles for lorsque je commence avec une condition fausse. (i.e. : for(a=0;a<0;a++))
Dans ton cas, je pense qu'une boucle while serait plus clair.
dit nous plutôt quel résultat tu espère avoir.
le dernier 0 indique la valeur de a dans ta deuxième boucle... il n'éxécute la boucle qu'une fois, la condition n'est remplie qu'une fois... A savoir que la condition de fin de ta première boucle est b=11....
Oups la belle connerie que je viens de dire :p
Oups la belle connerie que je viens de dire :p
Tu viens d'éditer ta réponse ggrr..... de toute façon j'ai dit n'importe quoi :p
Bah si c'est normal ;-)
{
long a=0,b=20,n;
while (b>10)
{
a++;
b--;
printf("%ld\n",a); //=1- 2 -3 - 4 5 - 6 - 7 - 8 - 9 - 10
}
printf("%ld\n",b); //=10
while (b<10) // CONDITION REMPLIE, tu ne rentre pas dans la boucle
{
a--;
b++;
printf("%ld\n",a);
}
printf("%ld\n",a); //=10
system("pause");
return (EXIT_SUCCESS);
}
donc tes print sont corrects.... Cordialement...
Bah si c'est normal ;-)
{
long a=0,b=20,n;
while (b>10)
{
a++;
b--;
printf("%ld\n",a); //=1- 2 -3 - 4 5 - 6 - 7 - 8 - 9 - 10
}
printf("%ld\n",b); //=10
while (b<10) // CONDITION REMPLIE, tu ne rentre pas dans la boucle
{
a--;
b++;
printf("%ld\n",a);
}
printf("%ld\n",a); //=10
system("pause");
return (EXIT_SUCCESS);
}
donc tes print sont corrects.... Cordialement...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tout a fait d accord avec fiddy. Dasn ton cas j utiliserai les short plutôt que les long. ça serait plus rapide selon le compilo.
J'ai essayé d'autres compilateurs mais j'ai toujours le même problème !
essayez le code et vous verrez
Help please...
Pour t'aider, tu peux afficher des :
dans le corps de ta boucle for1 et même astuce pour ta deuxième boucle for. Tu verras le nombre de fois qu'elles sont exécutées.
---------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long a,b=20,n;
for (a=0;b>10;a++)
{
b--;
printf("%ld\n",a);
}
printf("%ld\n",b);
for (a=0;b<10;a--)
{
b++;
printf("%ld\n",a);
}
printf("%ld",a);
system("pause");
return (EXIT_SUCCESS);
}
---------------------------------------------------------------------------------------------
voilà ce que la console m'affiche:
--------------------------------------------------------------------------------------------
0
1
2
3
4
5
6
7
8
9
10
0
appuyer sur une touche pour continuer...
--------------------------------------------------------------------------------------------
les printf à l'intérieur de la boucle et juste avant la seconde boucle s'exécutent normalement. le printf à l'intérieur de la deuxième boucle ne s'exécute pas car la condition est fausse b=10 et la condition est si b<10
MAIS CE QUI EST VRAIMENT BIZARRE C'EST QUE LE PRINTF JUSTE APRÈS LA SECONDE BOUCLE AFFICHE a=0 DONC a A PRIS LA VALEUR 0 PAR LA MAGIE DE DAVID BLAINE !!!) j'aimerai juste savoir pourquoi on rencontre ce problème avec la boucle for ?!!
Avec la boucle de type while ça marche super nickel
--------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long a=0,b=20,n;
while (b>10)
{
a++;
b--;
printf("%ld\n",a);
}
printf("%ld\n",b);
while (b<10)
{
a--;
b++;
printf("%ld\n",a);
}
printf("%ld\n",a);
system("pause");
return (EXIT_SUCCESS);
}
----------------------------------------------------------------------------------------------------------
La console affiche:
----------------------------------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
10
10
appuyer sur une touche pour continuer...
----------------------------------------------------------------------------------------------------------
Ce n'est pas de la folie ça ?
Si tu suit le cheminement de l'ordinateur (du moins je l'imagine ainsi)
- tu arrive sur une boucle for, tu regarde le premier argument, l'initialisation.
- tu effectue cette première commande, après tout pourquoi pas !?
- tu regarde la condition de sortie.
Pour moi, une boucle for() écrite ainsi for(x;y;z) est équivalente à une boucle while() suivante :
x;
while(1){
... //corps du for()
if(y) z;
else break;}