>> Résolu << : if ( i++ ne fonctionne pas !!

Bonjour à tous,

N'ayant pas trouvé de sujet connexe par le moteur de recherche,... j'ouvre un topic. Le problème est tellement ...inatendu que je soupsonne avoir commis une erreur mais... je ne vois pas où !

Voici les faits :

Ceci ne fonctionne pas:

if(PasPrg++ >= NbPasPrg) PasPrg = 0;

Ceci fonctionne :

PasPrg++; 
if(PasPrg >= NbPasPrg) PasPrg = 0;

La différence se constate sur la globalité du programme... l'appareil ne fonctionne pas avec le premier code et fonctionne avec le second. L'EDI est la version 1.0.5 envoyé sur UNO.

PasPrg++ est une opération sur la variable "PasPrg", tu ne peux pas faire une comparaison dessus.

Ca me semble normal, PasPrg++ est une abréviation de PasPrg = PasPrg + 1; On fait le calcul, on range le résultat en mémoire, et ensuite seulement il est disponible pour faire un test.

Merci pour votre réactivité ;)

Il est clair qu'il semble que cela ne fonctionne pas,... cependant,... une recherche Google ou autre MDR sur " arduino "if(i++" " fournit un tas d'exemples semblant fonctionner...

Hello,

if(PasPrg++ >= NbPasPrg) PasPrg = 0;

correspond à ceci:

if(PasPrg >= NbPasPrg) PasPrg = 0;
PasPrg++

Le ++ après donne la valeur AVANT l'incrémentation comme résultat.

Si tu veux incrémenter puis tester, tu dois faire ceci:

if(++PasPrg >= NbPasPrg) PasPrg = 0;

Jean-François: PasPrg++ est une opération sur la variable "PasPrg", tu ne peux pas faire une comparaison dessus.

FAUX ! L'incrémentation retourne une valeur. En "postfixe", elle retourne la valeur AVANT incrémentation, en préfixe, la valeur modifiée

+1

La solution est :

if(++PasPrg >= NbPasPrg) PasPrg = 0;

Cela fait partie des "détails" énervants du si concis C. :roll_eyes: :zipper_mouth_face: Ca fonctionne.

Merci Xavier, Merci à tous.

Je note ... :grin: