Go Down

Topic: >> Résolu << : if ( i++ ne fonctionne pas !! (Read 308 times) previous topic - next topic

LibertyCareche

Jun 11, 2014, 12:05 pm Last Edit: Jun 11, 2014, 02:07 pm by LibertyCareche Reason: 1
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:
Code: [Select]
if(PasPrg++ >= NbPasPrg) PasPrg = 0;

Ceci fonctionne :
Code: [Select]
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.

Quidquid agis, prudenter agas, et respice finem !

Jean-François

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

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Christian_R

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

LibertyCareche

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...
Quidquid agis, prudenter agas, et respice finem !

XavierMiller

Hello,

Code: [Select]
if(PasPrg++ >= NbPasPrg) PasPrg = 0;

correspond à ceci:
Code: [Select]
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:
Code: [Select]
if(++PasPrg >= NbPasPrg) PasPrg = 0;



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

B@tto

+1

La solution est :

Code: [Select]
if(++PasPrg >= NbPasPrg) PasPrg = 0;
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

LibertyCareche

#6
Jun 11, 2014, 02:07 pm Last Edit: Jun 11, 2014, 02:09 pm by LibertyCareche Reason: 1
Cela fait partie des "détails" énervants du si concis C.   :smiley-roll-blue:    :smiley-zipper:
Ca fonctionne.

Merci Xavier,
Merci à tous.
Quidquid agis, prudenter agas, et respice finem !

Jean-François

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up