| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2511 人关注过本帖
标题:[求助]VB的for循环问题!!请教各位!!
只看楼主 加入收藏
foxsports
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-6-26
收藏
 问题点数:0 回复次数:13 
[求助]VB的for循环问题!!请教各位!!
Private Sub MSComm1_OnComm()
Dim jsdata As Variant
Dim qdata(64) As Single
Dim jdata(64) As Single
Dim zhdata(64) As Single
Dim a, b As Single
For i = 0 To 64
If i = 64 Then Exit For
jsdata = MSComm1.Input
qdata(i) = jsdata(0)
Text1(i).Text = Hex(qdata(i))
Text2(i).Text = qdata(i)
Next i
For i = 0 To 64
If i = 63 Then Exit For
zhdata(i) = CSng(qdata(i) - 48)
Text4(i).Text = zhdata(i)
Next i
For i = 2 To 62 Step 2
If i = 62 Then Exit For
jdata(i) = zhdata(i) * 10 + zhdata(i - 1)
Text3(i / 2).Text = jdata(i)
Next i
End Sub
我在每个for下面都加了一句if语句来跳出循环,没有这个语句的话就跳不出来,直到提示下标越界,哪位知道为什么啊?然后我加断点F8运行的时候正常,自动运行的时候提示下标越界,说明自动运行时没有执行IF语句!!郁闷ing~~!!大家给看看!!这个是串口返回数据的计算问题!!再有就是有没有哪个高手愿意加我QQ:30297208,带带我,我是个新手!!
搜索更多相关主题的帖子: Text1 Text2 
2007-09-07 10:27
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册:2007-8-2
收藏
得分:0 

因為當i等於最大值的時候,還運行了一次。。。
比如這個:
For i = 2 To 62 Step 2
If i = 62 Then Exit For
jdata(i) = zhdata(i) * 10 + zhdata(i - 1)
Text3(i / 2).Text = jdata(i)
Next i
不加如果語句,最後一次運行的時候i的值就為64了


2007-09-07 10:41
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
你的字体很难看.

我的msn: myfend@
2007-09-07 10:42
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
收藏
得分:0 
Private Sub MSComm1_OnComm()
Dim jsdata As Variant
Dim qdata(64) As Single
Dim jdata(64) As Single
Dim zhdata(64) As Single
Dim a, b As Single
For i = 0 To 63
jsdata = MSComm1.Input
qdata(i) = jsdata(0)
Text1(i).Text = Hex$(qdata(i))
Text2(i).Text = qdata(i)
Next
For i = 0 To 62
zhdata(i) = CSng(qdata(i) - 48)
Text4(i).Text = zhdata(i)
Next i
For i = 2 To 60 Step 2
jdata(i) = zhdata(i) * 10 + zhdata(i - 1)
Text3(i / 2).Text = jdata(i)
Next i
End Sub

2007-09-07 10:56
foxsports
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-6-26
收藏
得分:0 
就是要比实际运行的少一次是么?我以为到了次数自动跳转呢!!我去试试啊!!先谢谢各位了!!
2007-09-07 11:03
foxsports
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-6-26
收藏
得分:0 
我试过了,已经可以了,就一个问题还没有解决,手动运行可以,自动运行就报错:下标越界,64个字节,我循环30次,别的不要了都不行啊,还是越界!!各帮忙啊!!
2007-09-07 15:18
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
以下是引用foxsports在2007-9-7 15:18:09的发言:
我试过了,已经可以了,就一个问题还没有解决,手动运行可以,自动运行就报错:下标越界,64个字节,我循环30次,别的不要了都不行啊,还是越界!!各帮忙啊!!

把你代码和出错信息发上来。光讲下标越界……貌似也不是不能解决……不过我懒得看你1楼被解决的代码了

2007-09-07 15:57
foxsports
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-6-26
收藏
得分:0 

Private Sub Command1_Click()
Dim s0(7) As Byte
s0(0) = &HAA
s0(1) = &H82
s0(2) = &H2
s0(3) = &H0
s0(4) = &H0
s0(5) = &H0
s0(6) = &H2E
s0(7) = &H55
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.Output = s0
End Sub

Private Sub Command4_Click()
Unload Me
End Sub

Private Sub MSComm1_OnComm()
Dim jsdata As Variant
Dim qdata(64) As Single
Dim jdata(64) As Single
Dim zhdata(64) As Single
Dim a, b As Single
For i = 0 To 64
jsdata = MSComm1.Input
qdata(i) = jsdata(0)
Text1(i).Text = Hex(qdata(i))
Text2(i).Text = qdata(i)
Next i
For i = 0 To 64
zhdata(i) = CSng(qdata(i) - 48)
Text4(i).Text = zhdata(i)
Next i
For i = 2 To 62 Step 2
jdata(i) = zhdata(i) * 10 + zhdata(i - 1)
Text3(i / 2).Text = jdata(i)
Next i
End Sub
这是所有的代码了,前面都没有用,是发送一组数据包,然后接收64个字节的数据包,再分解包,计算,在qdata(i) = jsdata(0)这个地方(第1个循环)就下标越界了,往下就不执行了!!用F8手工运行是正常的,自动运行就报错了,截图我周日再发上来吧!!今天没有截图,现在下班了!!

2007-09-07 16:33
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
以下是引用foxsports在2007-9-7 16:33:59的发言:

Private Sub Command1_Click()
Dim s0(7) As Byte
s0(0) = &HAA
s0(1) = &H82
s0(2) = &H2
s0(3) = &H0
s0(4) = &H0
s0(5) = &H0
s0(6) = &H2E
s0(7) = &H55
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.Output = s0
End Sub

Private Sub Command4_Click()
Unload Me
End Sub

Private Sub MSComm1_OnComm()
Dim jsdata As Variant
Dim qdata(64) As Single
Dim jdata(64) As Single
Dim zhdata(64) As Single
Dim a, b As Single
For i = 0 To 64
jsdata = MSComm1.Input
qdata(i) = jsdata(0)
Text1(i).Text = Hex(qdata(i))
Text2(i).Text = qdata(i)
Next i
For i = 0 To 64
zhdata(i) = CSng(qdata(i) - 48)
Text4(i).Text = zhdata(i)
Next i
For i = 2 To 62 Step 2
jdata(i) = zhdata(i) * 10 + zhdata(i - 1)
Text3(i / 2).Text = jdata(i)
Next i
End Sub
这是所有的代码了,前面都没有用,是发送一组数据包,然后接收64个字节的数据包,再分解包,计算,在qdata(i) = jsdata(0)这个地方(第1个循环)就下标越界了,往下就不执行了!!用F8手工运行是正常的,自动运行就报错了,截图我周日再发上来吧!!今天没有截图,现在下班了!!

截哪门子图呢……以前DOS时代程序员就不交流了?

把出错时i的值之类的东西查一查 自然就明白了。

不知道怎么查就自己研究。

2007-09-07 16:38
foxsports
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-6-26
收藏
得分:0 

那你解释一下为什么手动运行没有错误呢,自动运行怎么就报错了!!!你要能查出来就行!!我是查不出来!!

2007-09-09 07:50
快速回复:[求助]VB的for循环问题!!请教各位!!
数据加载中...
 
   



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

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