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

Archive.
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

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

Message 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"
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Voir mieux:

Code : Tout sélectionner

If FileType = 2 And (FileName$<>"." or FileName$<>"..")
:jesors:
Dernière modification par Dräc le ven. 21/avr./2006 14:14, modifié 1 fois.
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message 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…
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message 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.
Répondre