Question goto

chopper_sp Messages postés 6 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 20 mai 2006 - 29 janv. 2006 à 14:25
cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 - 29 janv. 2006 à 19:20
voila voila, au risque de paraitre bête, je me demandais se que pouvait bien signifier le goto, et si on pouvait le changer dans les codes par une autre fonction?

merci de bien vouloir me repondre

8 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
29 janv. 2006 à 15:56
GoTo, de l'anglais "GO TO" signifie "Aller à".

Ca permet, depuis un point de ton code, de te rendre à un autre
point(en sautant des instructions), le tout au sein d'une même
procédure ou fonction.

C'est un reste des anciens langages Basic, et il n'est pas super conseillé de l'utiliser.

Il n'y a pas d'instruction type pour le remplacer. Il n'y a que des algos bien pensés qui permettent de s'en soustraire.



Private Sub maProcedure()



MsgBox "première ligne"

Goto Suite

MsgBox "deuxième ligne"

Suite:

MsgBox "troisième ligne"

End Sub


Cette procédure n'affichera que la première et la troisième ligne.



Reste que le Goto est utilisé dans les cas critiques pour la gestion d'erreur.

Si plantage de mon appli, alors arrêter le programme et se rendre directement aux instructions de contrôle d'erreur.



On Error GoTo gestion_erreur

' code source





gestion_erreur:

' essayer de régler le problème ici




Manu
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
29 janv. 2006 à 16:27
Il faut absolument éviter d'utiliser des GoTo dans le code (sauf pour les routines de traitement d'erreur ou on n'a pas le choix) :
Un code avec un goto est très souvent difficile à lire, préférez plutôt les fonctions !

_____________________________________________________________________
0
chopper_sp Messages postés 6 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 20 mai 2006
29 janv. 2006 à 17:03
ma prof de vb ma dit de remplacer ce GOTO par un DO LOOP
voici le bout de programme que j'aimerais remplacer pouvez vous m'aider à le modifier car pour l'examum le GOTO n'est pas du tout indiquer

If Label1.Caption = "" Then GoTo error1
GoTo alors

End If

merci encore
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
29 janv. 2006 à 17:12
ben donne nous ton code complet pour qu'on puisse t'aider car là ca dépend de pas mal de chose !

_____________________________________________________________________
0

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

Posez votre question
chopper_sp Messages postés 6 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 20 mai 2006
29 janv. 2006 à 17:55
le voila


Dim i As Integer
Dim duree As Variant
Dim multi As Variant
Dim resultat As Integer


Private Sub Command1_Click()


Randomize
i = 65 + Rnd * 25
Label1.Caption = Chr$(i)
duree = 0
Timer1.Enabled = True


If Form2.Option1 = True Then
multi = 2
End If
End Sub


Private Sub Form_Activate()


Timer1.Enabled = False


End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)


If KeyAscii > 91 Then
KeyAscii = KeyAscii - 32
If Label1.Caption = "Perdu" Then GoTo error1
Label1.Refresh
End If

If (KeyAscii <> i) Then

If Label1.Caption = "" Then GoTo error1
GoTo alors

End If

If (KeyAscii = i) Then
Timer1.Enabled = False
If Form2.Option1 = True Then
duree = duree / 1.5
duree = Format(duree, "#")
resultat = duree
End If

If Form2.Option2 = True Then
duree = duree / 1.25

End If
If Form2.Option3 = True Then
duree = duree / 1
duree = Format(duree, "#")
resultat = duree
End If
End If


Select Case duree
Case 0 To 55
Label1.Caption = "Parfait" & ", votre score est de" & " " & resultat & " " & "points
Case 56 To 95
Label1.Caption = "Super" & ", votre score est de" & " " & resultat & " " & "points"
Case 96 To 135
Label1.Caption = "Bien" & ", votre score est de" & " " & resultat & " " & "points"
Case 136 To 175
Label1.Caption = "Moyen" & ", votre score est de" & " " & resultat & " " & "points"
Case Else
Label1.Caption = "Nul" & ", votre score est de" & " " & resultat & " " & "points"
End Select


Exit Sub


error1: MsgBox "Aucune touche n'a été affichée", vbOKOnly, "Erreur"
alors: MsgBox "Faux,la touche à taper était " & Chr$(i), vbOKOnly, "Perdu"
Label1.Caption = "Perdu"
End Sub


Private Sub option_Click()
Timer1.Enabled = False
Form2.Show
End Sub


Private Sub quitter_Click()


Timer1.Enabled = False
Form3.Show



End Sub


Private Sub Timer1_Timer()
duree = (duree + Timer1.Interval)

End Sub
0
cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 1
29 janv. 2006 à 18:13
Imbrique ta condition dans le traitement de ta fonction ce la donnerais
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii > 91 Then
KeyAscii = KeyAscii - 32
If Label1.Caption = "Perdu" Then MsgBox "Aucune touche n'a été affichée", vbOKOnly, "Erreur"
Label1.Refresh
End If

If (KeyAscii <> i) Then

If Label1.Caption = "" Then

MsgBox "Aucune touche n'a été affichée", vbOKOnly, "Erreur"
MsgBox "Faux,la touche à taper était " & Chr$(i), vbOKOnly, "Perdu"
Label1.Caption = "Perdu"

else
If (KeyAscii = i) Then
Timer1.Enabled = False
If Form2.Option1 = True Then
duree = duree / 1.5
duree = Format(duree, "#")
resultat = duree
End If

If Form2.Option2 = True Then
duree = duree / 1.25

End If
If Form2.Option3 = True Then
duree = duree / 1
duree = Format(duree, "#")
resultat = duree
End If
End If


Select Case duree
Case 0 To 55
Label1.Caption = "Parfait" & ", votre score est de" & " " & resultat & " " & "points
Case 56 To 95
Label1.Caption = "Super" & ", votre score est de" & " " & resultat & " " & "points"
Case 96 To 135
Label1.Caption = "Bien" & ", votre score est de" & " " & resultat & " " & "points"
Case 136 To 175
Label1.Caption = "Moyen" & ", votre score est de" & " " & resultat & " " & "points"
Case Else
Label1.Caption = "Nul" & ", votre score est de" & " " & resultat & " " & "points"
End Select
End if

end sub

quelque chose dans ce genre la
Il est vrai que Goto est une solution de facilité je l'avoue mais à éviter
deplus avec VB.net et une gestion des erreurs (try/cacth/endTry)on ne devrait plus en voir
0
chopper_sp Messages postés 6 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 20 mai 2006
29 janv. 2006 à 18:24
j'ai bien fait ce que tu m'a dit, maintenant il me compte la bonne reponse fausse, et la fausse comme étant la bonne
je vais regarder plus en détail merci tout de même
0
cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 1
29 janv. 2006 à 19:20
oui normal ya celle ligne
If (KeyAscii <> i) Then
d'ailleurs je n'ai pas vu la fin de cette clause

J'essaye de comprendre
Si ton Keyascii est > 91 tu retire 32 et si caption = perdu alors message "Aucune touche... "
si tu veux sortir rajoute Exit Sub

Si label.caption ="" alors msgbox aucune touche , fallait taper
Sinon
Si KeyAscii = i alors traitement
essaye de préciser ce que tu veux
Peut-être écrire une procedure du type
If Label1.caption = "Perdu" then
..........
ElseIf Label1.caption="" then
................
Else
..............
Endif
0
Rejoignez-nous