主题:如何让FUNCTION返回多个值
zhijinanqiu
[专家分:0] 发布于 2010-03-16 16:29:00
在主程序中,将两个变量(一个字符串和一个整型变量)传递给调用函数,而调用函数却是要返回另外一个整型数和一个二维数组,请问如何实现呢?
调用的参数和返回的参数分别是两个不同的变量
最后更新于:2010-03-16 16:32:00
回复列表 (共8个回复)
沙发
zhijinanqiu [专家分:0] 发布于 2010-03-16 17:15:00
这是我做的一部分程序,还没有返回变量,想要在函数readdata中的数组X和整数m返回到主程序中,以各主程序来使用它
Private Function Readdata(txdata As String, jn As Integer) As Long
Dim strPath, sFilePath, str As String
Dim i, j, m, n As Integer 'jn为一行中的数据个数
Dim X(1 To 3, 0 To 300), num(3) As Single
i = 0
strPath = App.Path
If Right(strPath, 1) <> "\" Then strPath = strPath + "\"
sFilePath = strPath & txdata
'********************************************************************************************读入数据
Open sFilePath For Input As #23 '打开数据文件
Do While Not EOF(23)
'循环对数据文件各行进行作图处理
Line Input #23, str '读出一行数据到str 中
For j = 1 To jn - 1
str = Trim(str): n = InStr(str, " ") '去掉字符串两端的空格,找到该数据中出现的首个空字符的位置
num(j) = Left(str, n - 1): str = Right(str, Len(str) - n) '提取出该行第j个数据num(j),将该行剩余字符串存入str中
Next j
str = Trim(str): num(j) = str '提取出该行第jn个数据
For j = 1 To jn
X(j, i) = (num(j)) '将第i行数据分成jn个分别存在X(j,i)中
Next j
i = i + 1
Loop
m = i - 1
Readdata = X
Close #23
End Function
Private Sub Form_Load()
Dim txdata As String
Dim i, j, m, jn As Integer
Dim X(1 To 3, 0 To 300) As Single
'********************************************************************************************初始形态读出来
txdata = "SHAPE.TXT"
jn = 2
X = Readdata(txdata, jn)
End Sub
板凳
一江秋水 [专家分:9680] 发布于 2010-03-17 08:10:00
在你的被调函数中,形参jn是传址方式,所以在主调过程中的相应实参也会改变,也就是说,你所需要的整型数已经返回了。
请参考下面的代码来修改你的代码:
Private Sub Form_load()
Dim J As Integer
Dim K() As Integer
J = 10
K = arrayfunction(J)
Debug.Print K(0, 0), K(0, 1), K(0, 2)
Debug.Print K(1, 0), K(1, 1), K(1, 2)
Debug.Print J
End Sub
Private Function arrayfunction(i As Integer) As Integer()
Dim x(1, 2) As Integer
x(0, 0) = i + 2: x(0, 1) = i + 3: x(0, 2) = i + 4
x(1, 0) = i * 2: x(1, 1) = i * 3: x(1, 2) = i * 4
i = 50
arrayfunction = x
End Function
3 楼
zhijinanqiu [专家分:0] 发布于 2010-03-17 15:30:00
我的可不止这些错误,而是方法还没找到的问题,你给的只是返回一个参数,我需要返回多个参数呢
[quote]在你的被调函数中,形参jn是传址方式,所以在主调过程中的相应实参也会改变,也就是说,你所需要的整型数已经返回了。
请参考下面的代码来修改你的代码:
Private Sub Form_load()
Dim J As Integer
Dim K() As Integer
J = 10
K = arrayfunction(J)
Debug.Print K(0, 0), K(0, 1), K(0, 2)
Debug.Print K(1, 0), K(1, 1), K(1, 2)
Debug.Print J
End Sub
Private Function arrayfunction(i As Integer) As Integer()
Dim x(1, 2) As Integer
x(0, 0) = i + 2: x(0, 1) = i + 3: x(0, 2) = i + 4
x(1, 0) = i * 2: x(1, 1) = i * 3: x(1, 2) = i * 4
i = 50
arrayfunction = x
End Function[/quote]
4 楼
一江秋水 [专家分:9680] 发布于 2010-03-17 16:05:00
唉,你要看仔细点,我的代码中已经返回了数组
5 楼
zhijinanqiu [专家分:0] 发布于 2010-03-17 16:11:00
[quote]唉,你要看仔细点,我的代码中已经返回了数组[/quote]
不单要返回数组,还要返回整数m,我需要返回两个参数
6 楼
一江秋水 [专家分:9680] 发布于 2010-03-17 19:57:00
没救了,这么简单的代码,居然看不出返回了一个数组一个整数(其实只要你愿意,可以返回64个整数),老师是怎么教的
7 楼
zhijinanqiu [专家分:0] 发布于 2010-03-18 10:19:00
[quote]没救了,这么简单的代码,居然看不出返回了一个数组一个整数(其实只要你愿意,可以返回64个整数),老师是怎么教的[/quote]
我自己学的,谢谢!你的代码实现不了我要求的功能,OK?我的代码只是为了表示我的程序大概意思,实际是有错误的,jn是传址方式,而实际上我写错了,我要求的是传值方式,你没有看清我补充的话。
8 楼
zhijinanqiu [专家分:0] 发布于 2010-03-18 12:54:00
我已经想到解决办法了
我来回复