标题:VB中BT goto BT疑问
只看楼主
zwfxiaowu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-12-3
 问题点数:0 回复次数:6 
VB中BT goto BT疑问
搜索更多相关主题的帖子: 疑问 VB goto 
2022-04-21 15:07
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
1、这是什么书,第一句数据定义就开始误人字弟。
   inputbox$ 那句 与 sum=sum+fs 这句数据类型冲突。
      当然就这个程序来讲,定义FS 为 Variant 时,VB6已帮你解决了这个问题,但潜在的问题却没告诉你。

2、
goto ,无条件转移命令。这条命令现在不推荐使用,一般用于组成循环(特别是这种还没学 FOR 循环、DO 循环)或 跳出循环时用,特别是跳出多重循环。  编译后对应的是 jmp 指令。
  在这程序中,这 goto 命令组成一种循环。然后要看懂这个程序,必须先去解决一下 msgbox 常数
  在 msgbox 函数中,第二个参数规定了msgbox窗体的样式和提示图标、按钮情况。 这种程序里又误人子弟,按编程规范,这里要求写成 常量求和表达式 。
  这里 36= vbYesNo(4)+vbQuestion(32) 。
  msgbox 返回值 是数值类型,这里判断返回结果是 vbYes(6)。按编程规范,这里也要写常量。
  
  N=msgbox("确定是否继续输入分数?",vbyseno+vbquestion,"是否继续输入")
  ....
  if n=vbyes then

--------
你有啥疑问?




授人于鱼,不如授人于渔
早已停用QQ了
2022-04-21 16:51
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:0 
这个代码对初学者来说就是捉迷藏。
1.vb的数据定义不是这样写的,dim FS as integer,N as integer,K as integer,SUM as long
要分开单独定义。
2.goto语句就是英文的意思,无条件跳转到后面的行号的位置执行。
3.你还没有说出有什么疑问呢。
2022-04-23 13:18
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
回复 2楼 风吹过b
goto部分,是正常的

冒号(:)可以连接多个语句。例:a = 1: b = 2

逗号(,)可以定义多个相同的变量,例:Dim a,b As Long

这下Get到新知识了,IDE没有报错说明没问题。

不信你试一下下面这个代码:

程序代码:
Private Sub Form_Load()
Dim a,b As Long
start: a = 1: b = 2
Debug.Print a + b
GoTo start
End Sub

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-04-23 15:50
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
举个例子:

Dim a, b, c As Long

其实只有 c 被定义成了long类型,变量a,变量b   并未定义数据类型。

正确的定义方法我不必多说,楼主图中的定义方法不会报错。未定义则它们的数据类型为变体变量:Variant

以下测试出结果:

程序代码:
Private Sub Form_Load()
Dim a, b, c As Long

Debug.Print VarType(a)  '返回0,表示空(未初始化)
Debug.Print VarType(b)  '返回0,表示空(未初始化)
Debug.Print VarType(c)  '返回3,表示一个长整数
Debug.Print TypeName(a)  '返回Empty,表示空(未初始化)
Debug.Print TypeName(b)  '返回Empty,表示空(未初始化)
Debug.Print TypeName(c)  '返回Long,表示一个长整数
End Sub



心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-04-23 16:11
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
回复 4楼 yuma
你仔细看了我的回复就明白,我第三句已说明了数据类型。
在VB6里,定义数据类型时,凡没有显式指明数据类型,也没有带类型符号时,就默认定义为 Variant 。

但在这种程序,按程序写法意图,显然不是打算定义为 Variant,而是打算定义成 integer 类型。
所以我才说 误人子弟。


这个程序里,运行时,在弹出的输入框中,输入一个字母时,会发生什么,你可以试试哦。

授人于鱼,不如授人于渔
早已停用QQ了
2022-04-23 17:44
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
我理解的完整的代码应该是这样的

Rem fs用于输入,所以是integer
Rem 而N是msgbox 的返回值,定义为msgbox的返回镇类型
Rem N定义后,你输入 N=后 就可以发现奥妙。这个功能是编辑菜单里的 自动完成关键字
Dim fs As Integer, n As VbMsgBoxResult, k As Integer, sum As Long

    k = k + 1
    Rem 加个val函数处理,以确保输入非数字转化为0
    Rem 字符串连接,VB有专用运算符 &
BT: fs = Val(InputBox$("请输入第" & Str(k) & "学生的成绩", "输入成绩", 0))
   
    Rem vbYesNo表示显示 是(Y) 和 否(N)两个按钮 ,vbQuestion 表示询问的图标
    n = MsgBox("确定是否继续输入分数", vbYesNo + vbQuestion, "是否继续输入")
    sum = sum + fs
    k = k + 1
    Rem 如果按下的是 是(Y) 按钮
    If n = vbYes Then
        GoTo BT
    End If
Label2.Caption = k - 1
Label4.Caption = sum
Label6.Caption = Int(sum / (k - 1) + 0.5)


授人于鱼,不如授人于渔
早已停用QQ了
2022-04-23 18:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508899-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.343613 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved