Pages: [1]   Go Down
Author Topic: >> Résolu << : if ( i++ ne fonctionne pas !!  (Read 268 times)
0 Members and 1 Guest are viewing this topic.
Lormaison
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Omnes vulnerant, ultima necat !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
if(PasPrg++ >= NbPasPrg) PasPrg = 0;

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

« Last Edit: June 11, 2014, 07:07:41 am by LibertyCareche » Logged

Quidquid agis, prudenter agas, et respice finem !

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

france
Offline Offline
God Member
*****
Karma: 15
Posts: 877
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Christian

Lormaison
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Omnes vulnerant, ultima necat !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour votre réactivité  smiley-wink

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

Quidquid agis, prudenter agas, et respice finem !

Belgium
Offline Offline
God Member
*****
Karma: 15
Posts: 520
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,

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

correspond à ceci:
Code:
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:
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
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3737
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

+1

La solution est :

Code:
if(++PasPrg >= NbPasPrg) PasPrg = 0;
Logged


Lormaison
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Omnes vulnerant, ultima necat !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cela fait partie des "détails" énervants du si concis C.   smiley-roll-blue    smiley-zipper
Ca fonctionne.

Merci Xavier,
Merci à tous.
« Last Edit: June 11, 2014, 07:09:17 am by LibertyCareche » Logged

Quidquid agis, prudenter agas, et respice finem !

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je note ...  smiley-mr-green
Logged

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

Pages: [1]   Go Up
Jump to: