Boucle While imbriquées.

Résolu
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008 - 19 juin 2004 à 11:22
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008 - 23 juin 2004 à 07:45
Un probleme survient lors de l imbriquation de boucle while.
Au lieu de faire boucle1*boucle2 instructions, il se produit boucle1+boucle2 instructions.

Je vous fait part de mon code, j' espere que vous pourrez m aider car cette fonction est essentielle ds mon addon.

alias findposinalltble { 
  var %i 1
  var %nametble $3
  set %position $1 $2
  var %maxposition $calc( $gettok(%position,1,32) + 24*4 ) $calc( $gettok( %position,2,32) + 34*4 )
  hmake -s daoc.temp $+ nametble $hget(daoc.name.joueurs).size
  while ( %position <= %maxposition ) {
    while ( %i <= $hget(daoc.name.joueurs).size ) { 
      echo -a %i
      if ( $hget($hget(daoc.name.joueurs,%i).item,3).data == %position ) {
        msg $4 $hget($hget(daoc.name.joueurs,%i).item,3).data
        hadd -s daoc.temp $+ %nametble $hget(daoc.name.joueurs,%i).item $gettok(%position,1,32) $+ , $+ $gettok(%position,2,32) 
      }   
      inc %i
    }
;echo pour le debug
    echo -a %position / %maxposition (boucle position)
;incrémentation de %position
    set %position $calc( $gettok( %position,1,32) + 24 ) $calc( $gettok(%position,2,32) + 34 )
  }
  hfree -s daoc.temp $+ %nametble
  unset %position
}

6 réponses

Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
19 juin 2004 à 13:18
j'ai trouvé l'erreur regarde le code :

alias findposinalltble {
var %i 1
var %nametble $3
set %position $1 $2
var %maxposition $calc( $gettok(%position,1,32) + 24*4 ) $calc( $gettok( %position,2,32) + 34*4 )
hmake -s daoc.temp $+ nametble $hget(daoc.name.joueurs).size
while ( %position <= %maxposition ) {
;voila l'erreur :)
var %i 1
;tu as oublié ce petit var %i 1
while ( %i <= $hget(daoc.name.joueurs).size ) {
echo -a %i
if ( $hget($hget(daoc.name.joueurs,%i).item,3).data == %position ) {
msg $4 $hget($hget(daoc.name.joueurs,%i).item,3).data
hadd -s daoc.temp $+ %nametble $hget(daoc.name.joueurs,%i).item $gettok(%position,1,32) $+ , $+ $gettok(%position,2,32)
}
inc %i
}
;echo pour le debug
echo -a %position / %maxposition (boucle position)
;incrémentation de %position
set %position $calc( $gettok( %position,1,32) + 24 ) $calc( $gettok(%position,2,32) + 34 )
}
hfree -s daoc.temp $+ %nametble
unset %position
}

j'ai trouvé ton problème il fallait mettre var %i 1 entre la premiere et la deuxieme boucle
c pour ça que la premiere boucle ne fonctionne qu'une seule fois
maintenant ça devrait marcher.
3
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
21 juin 2004 à 01:13
Dis Huitre ... je pourrais savoir si ça marche ? j'ai pas de réponse c pas cool ...
0
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
21 juin 2004 à 21:41
Dsl kerrigan je ne suis pas chez moi depuis le post , je te dis demain soir si ca marche.
0
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
22 juin 2004 à 22:25
Voila nickel ca marche, merci kerrigan ;)

Je ne pensais pas que les variables étaient autant locale que ça ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
23 juin 2004 à 00:47
lol haaaaaaaaaaaaa je suis content que ça marche.

et oui ça tu les variables locales lol c rapide puissant et très locale quel pied :)
0
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
23 juin 2004 à 07:45
merci de ton aide petit(e)? Kerrigan =)
0
Rejoignez-nous