[Résolu] 4!=4, je ne comprends pas

Bonjour

Mon code doit afficher l’indice du premier élément d’un tableau qui est à false et sinon afficher “All used”

  int command_count = 4;
  bool p[COMMAND_COUNT];
  p[0] = true;
  p[1] = true;
  p[2] = true;
  p[3] = true;

  int i = 0;
  for (i=0; (p[i]==true && i <= command_count); i++);
  Serial.print("i = ");
  Serial.println(i);
  Serial.print("command_count = ");
  Serial.println(command_count);
  if (i==command_count) {
    Serial.println("All used");
  }
  else {
    Serial.print("Unused : ");
    Serial.println(i);
  }

Mais cela affiche :

i = 4
command_count = 4
Unused : 4

Donc 4 n’est pas égal à 4…
Pouvez vous m’indiquer mon erreur ?

Merci.

David.

J'ai cru qu'en rédigeant ce post, ça m'aiderai à comprendre, mais non. Je sèche sur l'explication....

J'ai remplace le for par :

while(p[i]==true) i++;

Pareil... >:(

Bonjour,

Comme on n’a pas le code entier on ne peut que supposer que COMMAND_COUNT égal 4.
Donc dans la boucle for tu accèdes en dehors du tableau (il faudrait mettre i < command_count) et le programme fait n’importe quoi.

for (i=0; (p*=true && i <= command_count); i++);*
*********
ôte le = dans la comparaison.
Car sinon, la boucle se stoppe sur i=3
et donc
if (i==command_count) {

  • Serial.println(“All used”);*
    est FALSE

Merci.
J’ai dû aussi inverser les conditions dans le for :

for (i; ( i < command_count && p[i]==true); i++);

Afin de p ne soit pas évalué si (i < command_count) est vrai.
Pff, j’ai dû passer plus d’une heure dessus…
Merci !

Oui effectivement, il faut aussi faire le test sur l'index avant de tester la valeur de p*.*

  for (i=0; (p[i]==true && i <= command_count); i++);

Cette ligne de code ne fait rien.
A cause du ; au bout.
Ca compte de 0 à 3, et c’est tout.
Ensuite, après la boucle donc, i est resté positionné à 4.
Pour faite une boucle utile :

 for (i=0; (p[i]==true && i <= command_count); i++) // pas de ; !!!!
{
   // faire qque chose, selon i
}

Ca marche très bien et c'est volontaire. Je n'ai rien à faire pendant la boucle for. Ce qui m'intéresse, c'est la version finale de i.

Peut être que sort de la boucle parce que p[4] est false même si 4 <= 4 car il y a un &&.
false && true = false

Ah bin si tu mets des trucs inutiles dans ton code, en le sachant, ça va pas aider...

Moi je trouve intéressante son idée. Pas de tout inutile et je la garde dans mon tiroir.