Page 1 sur 1

[R] Switch ... Case étrange

Posté : jeu. 26 sept. 2013 13:58
par GhostLine
Salut à tous !

J'ai détecté un truc bizarre lors de la rédaction d'un de mes scripts, que je vous soumets :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case FileExists("c:\windows") = 0
            MsgBox(0, "", "Coin !")
        Case FileExists("c:\windows") <> 0
    MsgBox(0, "", "Coiiiiiiin !!!!")
    EndSwitch
WEnd
Si vous testez ce script sur un PC qui possède un répertoire c:\windows, vous devriez obtenir comme moi sytématiquement une msgbox avec le message "Coin !". Or, l'aide de FileExists nous dit :

Return Value
Success: Returns 1.
Failure: Returns 0 if path/file does not exist.

Je ne rencontre cette situation que lorsque j'utilise Switch ... Case.

Ma question : est ce un bug, ou bien quelque chose m'échappe-t-il ?

Re: [..] Switch ... Case étrange

Posté : jeu. 26 sept. 2013 14:05
par FireFox
Bonjour,
Le switch compare la variable que tu lui passes avec les Case, or ici tu compares le message fenêtre à FileExists() <> 0 ou FileExists(...) = 0 ce qui donne soit True ou False (donc 1 ou 0).

Lorsqu'il n'y a pas de message fenêtre la fonction GUIGetMsg retourne 0 donc va matcher le Case valant False, donc pas directement ce que tu veux pour le FileExists.

Il faudrait mettre un If à la place en dehors du Switch pour les 2 derniers Case.

Cdlt, FireFox.

Re: [..] Switch ... Case étrange

Posté : jeu. 26 sept. 2013 14:12
par ZDS
Bonjour,

Ou bien tu peux changer par un select, afin de garder une structure à base de case comme switch (parfois plus clair à la relecture qu'un amas de If/ElseIf/Else ^^ mais c'est exactement le même principe que des blocs If):
► Afficher le texteCode avec select
A bientôt !

Re: [..] Switch ... Case étrange

Posté : jeu. 26 sept. 2013 14:21
par GhostLine
Merci les gars ! Comme prévu, c'est tout à fait logique. Bon, bah je vais aller corriger trois ans de scripts que j'ai fait comme ça, moi ... :D