【问题标题】:Visual Basic 4: Expected ArrayVisual Basic 4:预期数组
【发布时间】:2023-03-06 19:27:01
【问题描述】:

我一直在尝试在 Visual Basic 4 上做一个小项目(我知道,旧版本。但它需要在旧计算机上工作),我有这个计算器代码。它用于 equals 命令:

Private Sub Command12_Click()
    Dim sd As Integer
    Dim operator As Integer
    Dim result As Integer
    Dim Val As String

    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

问题是,一旦我运行它,它就会显示这个错误:

我尝试在互联网上搜索,我在网上找到的唯一解决方案是“关闭并重新打开 Visual Basic 并希望它有效”,但它没有......有什么建议吗?

【问题讨论】:

  • 您已将 Val 声明为字符串:Dim Val As String。为什么?

标签: vb6


【解决方案1】:

正如其他人所说,直接导致错误的问题是Dim Val as String 语句,但我看不出有人提到了原因...

问题在于,通过Dim 识别标识符Val,您有效地掩盖了固有的Val() 函数。稍后在您的原始代码中,当您引用标识符时,您使用的是需要数组或函数的语法;由于您已将 Dim 编辑为变量,因此解析器会假定它必须是数组变量,但事实并非如此 - 因此出现 Expected array 错误。

简单修复 - 只需删除 Dim Val as String 行。通过将 txtOutput.Text = result 语句移到 If...End If 块之外,可以稍微缩短代码,这将在大小和清晰度(但不是性能)方面有所改进,但否则它会按原样工作.

【讨论】:

    【解决方案2】:

    正如@Steeeve 所说,删除“Val as String”行,但我怀疑错误确实出现了,因为所有以“result”开头的行都有两条语句,这让 VB 感到困惑。你只需要

    txtOutput.Text = result
    

    在 If ... End If 语句之后一次:

    Private Sub Command12_Click()
        
        Dim sd As Integer
        Dim operator As Integer
        Dim result As Integer
        
        If operator = 1 Then
          result = Val(num) + Val(txtOutput.Text)
        
        ElseIf operator = 2 Then
          result = Val(num) - Val(txtOutput.Text)
        
        ElseIf operator = 3 Then
          result = Val(num) * Val(txtOutput.Text)
        
        ElseIf operator = 4 Then
          result = Val(num) / Val(txtOutput.Text)
        
        ElseIf operator = 5 Then
          result = Val(num) Mod Val(txtOutput.Text)
        
        ElseIf operator = 6 Then
          result = Val(num) * Val(num)
        
        End If
        
        txtOutput.Text = result
     End Sub
    

    【讨论】:

    • 不是批评您的解决方案,而是您在哪里看到一行中有多个语句?在我的浏览器中,他们的代码格式正确(如果不是最佳的)
    • 在我发布答案后,原始帖子已被编辑并重新格式化。最初,这些行在“结果”语句之后只有一个空格,并且紧跟在同一行之后的是 txtOutput.txt 行。
    【解决方案3】:

    明显的问题是重新定义 Val,但您也可以通过只进行一次转换来稍微清理一下以使其更易于理解。

    Private Sub Command12_Click()
        Dim sd As Integer
        Dim operator As Integer
        Dim result As Integer
       
        Dim vNum = Val(num)
        Dim vOuput = Val(txtOutput.Text)
    
        If operator = 1 Then
            result = vNum + vOuput
        ElseIf operator = 2 Then
            result = vNum - vOuput
        ElseIf operator = 3 Then
            result = vNum * vOuput
        ElseIf operator = 4 Then
            result = vNum / vOuput
        ElseIf operator = 5 Then
            result = vNum Mod vOuput
        ElseIf operator = 6 Then
            result = vNum * vNum  
        End If
       
        txtOutput.Text = result
    End Sub
    

    【讨论】:

      【解决方案4】:

      Val 是一个内置函数,它返回从字符串中读取的数字。

      例子:

      value% = Val("abc123") '返回 123

      【讨论】:

        猜你喜欢
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多