Page 1 sur 1

While Wend : mauvaise ou bonne interpretation... [Résolu]

Publié : ven. 21/avr./2006 13:21
par SPH
Regardez ce code (un morceau de mon "virus" gentil present dans APPLICATION) :

Code : Tout sélectionner

While dossier<1000 
      If ExamineDirectory(0, d$, "*.*")
          Repeat
            FileType = NextDirectoryEntry()
            If FileType
              FileName$ = DirectoryEntryName()
              If FileType = 2 And FileName$<>"." And FileName$<>".." And dossier<1000
                dossier$(dossier)=d$+FileName$+"\"; on memorise les repertoires de C
                Debug dossier$(dossier)
                dossier+1
                Delay(1) ;   pause pour ne pas prendre 100% du processeur
              EndIf
            EndIf
          Until FileType = 0
      EndIf
  d$=dossier$(Random(dossier-1)) ; on refouille encore plus profondement dans les repertoires suivants (de facon aleatoire)
Wend
Globalement, tant que dossier est plus petit que 1000, on reste dans la boucle While Wend.
Et pourtant, j'ai du ajouter "And dossier<1000" a la ligne :

Code : Tout sélectionner

If FileType = 2 And FileName$<>"." And FileName$<>".." And dossier<1000
Car en effet, dossier peut devenir plus grand ou egale a la limite fixé par While Wend sans pour autant que l'on quitte le While Wend.
Je sais que cela depend de "priorités" mais je tenais juste a le signaler au cas où...
Cela ne me derange pas mais cela m'a fait un peu drole de rajouter "And dossier<1000"

Publié : ven. 21/avr./2006 13:34
par Backup
cela viens du fait qu'en Pure Basic pour que les "or" , "and"
soit bien évaluer il faut les separer par des parentheses !!

Code : Tout sélectionner

If (FileType = 2 And FileName$<>".") or (FileType = 2 And (FileName$<>"..")
comme ça ça devrai marcher :D

Publié : ven. 21/avr./2006 13:59
par Dräc
Voir mieux:

Code : Tout sélectionner

If FileType = 2 And (FileName$<>"." or FileName$<>"..")
:jesors:

Publié : ven. 21/avr./2006 14:13
par Dräc
Dans ton code, tu as deux boucles imbriquées :While et Repeat.

Tant que tu ne sorts pas de Repeat/Until, ‘dossier’ peut-etre incrémenté, donc oui il peut te retrouver avec dossier > 1000 avant de revenir au test de la boucle While…

Publié : ven. 21/avr./2006 15:59
par SPH
Hmmmm, le "bug" apparent n'en ai peut etre pas un. Je sais, il y a des priorités. Mais dans le doute, je preferais le signaler.