Question goto

Signaler
Messages postés
6
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
20 mai 2006
-
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
-
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

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
130
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 !

_____________________________________________________________________
Messages postés
6
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
20 mai 2006

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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
130
ben donne nous ton code complet pour qu'on puisse t'aider car là ca dépend de pas mal de chose !

_____________________________________________________________________
Messages postés
6
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
20 mai 2006

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
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
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
Messages postés
6
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
20 mai 2006

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
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
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