Probleme Boucle for

Signaler
Messages postés
43
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2017
-
NitRic
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
Bonjour,
je débute en C, l'habitude je programme en visual basic.
Je suis en train de faire un programme pour un pic 16f88,
mon probleme je n'arrive pas a faire une boucle de 12 a 0
Quand je met for (i=12;i>=1;i++) tout va bien ca compte de 12 a 1 par contre,
quand je met for (i=12;i>=0;i++) rien ne va plus !!!
Je ne comprend pas mon erreur
un petit coup de main
Merci

PS : Quelqu'un connaitrais t'il un tutoriel ou un bouquin pour programmer le pic 16f88 avec le logiciel pcwh css

11 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
salut

bizarre

for (i=12;i>=1;i++)

--> Boucle infini car la condition d'arret est toujours vrai
tour 1  -> i=12
tour 5  -> i= 17
....
tour n -> i = 12+n
-----> boucle infinie

il faut utiliser
i--;

attention les tableaux sont indexés sont sur une base 0
case 1 à l'index 0 soit tab[0]
case nb element à l'index length - 1

voila
Messages postés
43
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2017

je suis desolé je me suis trompé dans ma question
j'avais bien mis --
Quand je met for (i=12;i>=1;i--) tout va bien ca compte de 12 a 1 par contre,
quand je met for (i=12;i>=0;i--) rien ne va plus !!!
le compilateur me dit que la condition est toujours vrai
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
Moi j'ai pas de probleme en c#
le cpp a normalement le meme comportement

j'ai avec
 for (int i = 12; i >= 0; i--)
            {
                  System.Diagnostics.Debug.WriteLine(i);
            }
            System.Diagnostics.Debug.WriteLine("fin");

mais avec uint ca plante
 for (uint i = 12; i >= 0; i--)

            {

                  System.Diagnostics.Debug.WriteLine(i);

            }

            System.Diagnostics.Debug.WriteLine("fin");

car 0 -1 en unit = 4294967295 cool  ;-)
Messages postés
43
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2017

Merci pour ta réponse
mais ça ne solutionne pas mon problème ça fait toujours pareille
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
En passant en de uint en int ca ne fonctionne pas????
Messages postés
43
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2017

non ça ne fonctionne pas, je suis dépassé, c'est vraiment bizarre.
Que de problème pour compté de 12 a 0 zéro y compris.
Merci du coup de main
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
Ca compile?
Quel est le type de i?

Et en pas a pas avec le debugger?
Messages postés
43
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2017

Ça compile mais en me disant a la ligne ou est le for que la condition est toujours vrai
Je compile avec pcwh c'est un compilateur pour pic, c'est un programme pour un pic 16f88 que je fait..
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
Je n'ai pas d'idée

Si tu n'es pas sur un unit, quel est le résultat en pas à pas

Solution de secours pas propre tu décales les index

for (i=13;i>=1;i--){
int indx = i -1;
// travail avec indx à la place i

}
Messages postés
43
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2017

Bonjour,
j'y avais pensez mais ça fait le bordel, mais bon en attendant.....
Je te remercie pour ton aide
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

#include <stdio.h>

int main()
{
    int i = 12;
    while (i-- > 0) // affiche 11 à 0 (12 tours)
    {
        printf("%d\n", i);
    }
    puts("\n");
    for (i = 12; i > 0; i--) // affiche 12 à 1 (12 tours)
    {
        printf("%d\n", i);
    }
    return 0;
}

~(.:: NitRic ::.)~