goto语句是怎样执行的

时间:2022-09-08 15:59:53
Private Sub Command18_Click()
If lf = 1 Then
GoTo 10
End If
Call num_load(".")
10:
End Sub
假如lf=1时
是不是就不执行Call num_load(".")
直接10:

18 个解决方案

#1



#2


是这样的

#3


没错.

#4


尽量不用或少用goto

#5


Sub num_load(n As String)     
If lf = 1 Then             
GoTo 10
End If
If d_data = "0" Or tf = 1 Then          
d_data = n
GoTo 20
End If
l1 = Len(d_data)
l1 = l1 - 1
End If
If InStr(d_data, ".") > 0 Then
l1 = l1 - 1
End If
If l1 > 14 Then                          
GoTo 10
End If
d_data = d_data + n                      
If InStr(d_data, ".") > 0 Then           
Text1.Text = d_data
End If
20:
  If InStr(d_data, ".") = 0 Then
  Text1.Text = d_data + "."
  End If
  cf = 0
  tf = 0
10:
End Sub


这里面执行完20: 语句之后
返回去执行,还是直接执行10:

#6


看你的代码,好乱.逻辑性不强.

能说一说代码的功能吗?

不定有高手能帮你重写.

你的代码也有问题:

If d_data = "0" Or tf = 1 Then          
   d_data = n 
   GoTo 20 
End If  '这里有 End if
   l1 = Len(d_data) 
   l1 = l1 - 1 
End If '这里也有End if 有上一个End if 结果后没有If与此End if 配套,出错.

#7


Private Sub Command19_Click() 
If cf = 1 Then 
GoTo 10 
End If 
Call num_compute("/") 
10: 
fuhao = "/" 
End Sub 
这段代码 
假如cf=1 
执行了10: 
是不是要返回来执行Call num_compute("/") 

#8


咋没逻辑

#9


"这里面执行完20: 语句之后 
返回去执行,还是直接执行10:"
-----会直接执行10:

#10


这种GOTO跳转是没有必要的:
Private Sub Command18_Click() 
If lf = 1 Then 
GoTo 10 
End If 
Call num_load(".") 
10: 
End Sub 

你直接写:
Private Sub Command18_Click() 
If lf <> 1 Then Call num_load(".") 
End Sub 
或者写成:
Private Sub Command18_Click() 
If lf = 1 Then Exit Sub
Call num_load(".") 
End Sub 
不就可以了么,你那种写法简直是自讨苦吃

#11


在VB里面,除了ON ERROR语句后面,其它地方不应该出现GOTO

#12


其实也不尽然,根据实际情况,例如VB中循环没有C里的Continue功能,我常常用GOTO来模似,避免一个长长的IF判断,当然,这些要加注释说清楚的

#13


引用 12 楼 zhzboy 的回复:
其实也不尽然,根据实际情况,例如VB中循环没有C里的Continue功能,我常常用GOTO来模似,避免一个长长的IF判断,当然,这些要加注释说清楚的

VB里面是没有Continue, 在C里面Continue是用来提前结束当前循环, 但是在逻辑上,Continue也只等同于一个IF判断,因此是可以避免的.

#14


是的,要少用GOTO,或者尽是不用GOTO

而且GOTO后面所跟的最好也不要用什么10,20之类,最好用一个有意义的词


如跟个有实际意义的词,如GOTO EXITSUB,就表示退出子程序,时间长了后,看到这句一下了就明白是干什么用的

#15


很准确的告诉你   是的

#16


是的

#17




'将楼盖这么高,不怕楼主摔到了.

'下面代码我帮楼主改好了.用什么Goto 啊.


Sub num_load(n As String)

  If lf = 1 Then Exit Sub

  If d_data = "0" Or tf = 1 Then
 
    d_data = n
    
    If InStr(d_data, ".") = 0 Then
       Text1.Text = d_data + "."
    End If
    
    cf = 0
    tf = 0
    Exit Sub
  Else
 
    l1 = Len(d_data)
    l1 = l1 - 1
     
  End If
   
  If InStr(d_data, ".") > 0 Then
     l1 = l1 - 1
  End If

  If l1 > 14 Then Exit Sub
  
  d_data = d_data + n
  
  If InStr(d_data, ".") > 0 Then
     Text1.Text = d_data
  End If
  
End Sub

#18


又仔细看了下楼主中间的一大段代码,似乎有种隐隐约约的熟悉感.
想了半天终于想起来哪里眼熟了.

弱问一句:楼主之前是否只接触过APPLE II上的ROM BASIC?

#1



#2


是这样的

#3


没错.

#4


尽量不用或少用goto

#5


Sub num_load(n As String)     
If lf = 1 Then             
GoTo 10
End If
If d_data = "0" Or tf = 1 Then          
d_data = n
GoTo 20
End If
l1 = Len(d_data)
l1 = l1 - 1
End If
If InStr(d_data, ".") > 0 Then
l1 = l1 - 1
End If
If l1 > 14 Then                          
GoTo 10
End If
d_data = d_data + n                      
If InStr(d_data, ".") > 0 Then           
Text1.Text = d_data
End If
20:
  If InStr(d_data, ".") = 0 Then
  Text1.Text = d_data + "."
  End If
  cf = 0
  tf = 0
10:
End Sub


这里面执行完20: 语句之后
返回去执行,还是直接执行10:

#6


看你的代码,好乱.逻辑性不强.

能说一说代码的功能吗?

不定有高手能帮你重写.

你的代码也有问题:

If d_data = "0" Or tf = 1 Then          
   d_data = n 
   GoTo 20 
End If  '这里有 End if
   l1 = Len(d_data) 
   l1 = l1 - 1 
End If '这里也有End if 有上一个End if 结果后没有If与此End if 配套,出错.

#7


Private Sub Command19_Click() 
If cf = 1 Then 
GoTo 10 
End If 
Call num_compute("/") 
10: 
fuhao = "/" 
End Sub 
这段代码 
假如cf=1 
执行了10: 
是不是要返回来执行Call num_compute("/") 

#8


咋没逻辑

#9


"这里面执行完20: 语句之后 
返回去执行,还是直接执行10:"
-----会直接执行10:

#10


这种GOTO跳转是没有必要的:
Private Sub Command18_Click() 
If lf = 1 Then 
GoTo 10 
End If 
Call num_load(".") 
10: 
End Sub 

你直接写:
Private Sub Command18_Click() 
If lf <> 1 Then Call num_load(".") 
End Sub 
或者写成:
Private Sub Command18_Click() 
If lf = 1 Then Exit Sub
Call num_load(".") 
End Sub 
不就可以了么,你那种写法简直是自讨苦吃

#11


在VB里面,除了ON ERROR语句后面,其它地方不应该出现GOTO

#12


其实也不尽然,根据实际情况,例如VB中循环没有C里的Continue功能,我常常用GOTO来模似,避免一个长长的IF判断,当然,这些要加注释说清楚的

#13


引用 12 楼 zhzboy 的回复:
其实也不尽然,根据实际情况,例如VB中循环没有C里的Continue功能,我常常用GOTO来模似,避免一个长长的IF判断,当然,这些要加注释说清楚的

VB里面是没有Continue, 在C里面Continue是用来提前结束当前循环, 但是在逻辑上,Continue也只等同于一个IF判断,因此是可以避免的.

#14


是的,要少用GOTO,或者尽是不用GOTO

而且GOTO后面所跟的最好也不要用什么10,20之类,最好用一个有意义的词


如跟个有实际意义的词,如GOTO EXITSUB,就表示退出子程序,时间长了后,看到这句一下了就明白是干什么用的

#15


很准确的告诉你   是的

#16


是的

#17




'将楼盖这么高,不怕楼主摔到了.

'下面代码我帮楼主改好了.用什么Goto 啊.


Sub num_load(n As String)

  If lf = 1 Then Exit Sub

  If d_data = "0" Or tf = 1 Then
 
    d_data = n
    
    If InStr(d_data, ".") = 0 Then
       Text1.Text = d_data + "."
    End If
    
    cf = 0
    tf = 0
    Exit Sub
  Else
 
    l1 = Len(d_data)
    l1 = l1 - 1
     
  End If
   
  If InStr(d_data, ".") > 0 Then
     l1 = l1 - 1
  End If

  If l1 > 14 Then Exit Sub
  
  d_data = d_data + n
  
  If InStr(d_data, ".") > 0 Then
     Text1.Text = d_data
  End If
  
End Sub

#18


又仔细看了下楼主中间的一大段代码,似乎有种隐隐约约的熟悉感.
想了半天终于想起来哪里眼熟了.

弱问一句:楼主之前是否只接触过APPLE II上的ROM BASIC?