Visual Basic 4 运行计算器代码提示Expected Array报错如何解决
报错原因分析
核心问题是你在代码中声明了名为Val的字符串变量,覆盖了Visual Basic内置的Val()类型转换函数。当你后续调用Val(num)、Val(txtOutput.Text)时,VB会将Val识别为你自定义的普通变量,认为你要执行数组取值操作,因此抛出「Expected Array(期望数组)」报错。
可行解决方案
- 第一步:直接删除代码中的
Dim Val As String这行声明即可,Val是VB原生内置函数,无需额外声明即可直接使用,删除后即可解决当前的报错问题。 - 第二步:可同步优化代码中存在的其他逻辑问题,避免后续出现其他运行错误:
- 当前代码中
operator是过程内局部变量,每次点击等于按钮都会被重置为0,无法读取之前选择运算符时存储的值,需要将operator、num变量改为模块级/全局变量,放在过程外部声明 - 代码中声明的
sd变量未被使用,可以直接删除 - 执行除法、取模运算前需要判断除数是否为0,避免触发除零报错
- 当前代码中
修正后参考代码
' 把这两个变量放到代码模块的顶部,过程外声明,作为模块级变量 Dim operator As Integer Dim num As String Private Sub Command12_Click() Dim result As Integer ' 除数校验,避免除零错误 If (operator = 4 Or operator = 5) And Val(txtOutput.Text) = 0 Then txtOutput.Text = "错误" Exit Sub End If If operator = 1 Then result = Val(num) + Val(txtOutput.Text) txtOutput.Text = result ElseIf operator = 2 Then result = Val(num) - Val(txtOutput.Text) txtOutput.Text = result ElseIf operator = 3 Then result = Val(num) * Val(txtOutput.Text) txtOutput.Text = result ElseIf operator = 4 Then result = Val(num) / Val(txtOutput.Text) txtOutput.Text = result ElseIf operator = 5 Then result = Val(num) Mod Val(txtOutput.Text) txtOutput.Text = result ElseIf operator = 6 Then result = Val(num) * Val(num) txtOutput.Text = result End If End Sub
内容的提问来源于stack exchange,提问作者Fraaaaaa
相关产品推荐
相关产品推荐

