在处理添加到变量数组大小时遇到了以下问题。循环运行一次,然后它应该基本上。但我很好奇会导致这种行为的原因是什么?我不太清楚如何调用循环退出函数?
以下是代码:
Module Module1
Sub Main()
Dim num(-1)
Dim i = 0
Console.WriteLine("Input numbers to be added, q to stop:")
Dim input
Dim total = 0
Do
ReDim Preserve num(UBound(num) + 1) : num(UBound(num)) = i 'resize the array each time before an element is added.
input = Console.ReadLine
If IsNumeric(input) Then 'attempt to break loop on non numeric input
num(i) = CInt(input)
i += 1
Else
Exit Do
End If
Loop
total = 0
For Each n In num
total += n
Next
Console.WriteLine(Join(num))
Console.WriteLine("Total: " & total)
Console.ReadLine()
对于输入:1 2 3 4 5 q
,我得到的输出是:
1 2 3 4 5 5 Total: 20
它将最后一个元素添加两次,这很有趣,因为它不仅运行了两次,而且以某种方式使用最后一个数字输入,即使最终输入不是数字。有谁知道为什么会这样?
答案 0 :(得分:3)
你们两个(jnb92,PankajJaju)应该不在之前增加数组你确定输入是数字并且必须存储。
Dim input
Do
input = Console.ReadLine()
If IsNumeric(input) Then 'attempt to break loop on non numeric input
ReDim Preserve num(UBound(num) + 1)
num(UBound(num)) = CInt(input)
Else
Exit Do
End If
Loop
更新评论:
你的
ReDim Preserve num(UBound(num) + 1) : num(UBound(num)) = i
为每个输入分配i
到num
;您的
num(i) = CInt(input)
用数字输入覆盖,但不用终止"q"
覆盖。那么对于你的(唯一的?)测试用例,虚假的最后一个元素是(意外)5。
答案 1 :(得分:0)
我已经使用了您的脚本并试图创建一个可行的解决方案
Dim num, input, total, i
num = Array()
i = 0
Do
input = Inputbox("Input numbers to be added, q to stop:")
If IsNumeric(input) Then 'attempt to break loop on non numeric input
ReDim Preserve num(UBound(num) + 1) 'resize the array each time before an element is added.
num(i) = CInt(input)
i = i + 1
Else
Exit Do
End If
Loop
total = 0
For Each n In num
total = total + n
Next
msgbox Join(num)
msgbox "Total: " & total
编辑 - 根据@ Ekkehard.Horner评论更新答案