Private Sub Command1_Click()
num = CLng(text1.Text)
Call factorial(num)              错好像是在这一句,,                    
End SubPrivate Sub text1_Change()
text2.Text = ""
End SubPrivate Sub factorial(mub As Long)
Dim result As Long
Dim ptr As Long
result = 1
For ptr = 1 To num
  result = result * ptr
Next ptr
text2.Text = CStr(result)
End Sub我是照书上抄的,,大家帮帮我

解决方案 »

  1.   

    Private Sub Command1_Click()
    Dim num As Long              //加了一句(如不加,后面改一样)
    num = CLng(Text1.Text)
    Call factorial(num)
    End SubPrivate Sub text1_Change()
    Text2.Text = ""
    End SubPrivate Sub factorial(num As Long)//(改为byval num as long 另外你num在下面写错了!)
    Dim result As Long
    Dim ptr As Long
    result = 1
    For ptr = 1 To num
      result = result * ptr
    Next ptr
    Text2.Text = CStr(result)
    End Sub
      

  2.   

    Private Sub Command1_Click()
    num = CLng(Text1.Text)
    If num > 12 Then
        MsgBox "参数错误"
        SetF Text1
        Exit Sub
        
    End If
    Call factorial(num)              '
    End SubPrivate Sub text1_Change()
    Text2.Text = ""
    End SubPrivate Sub factorial(ByVal mub As Long)
    Dim result As Long
    Dim ptr As Long
    result = 1
    For ptr = 1 To mub
      result = result * ptr
    Next ptr
    Text2.Text = CStr(result)End Sub
    Private Sub SetF(ctl As Control)
        With ctl
        .SelStart = 0
        .SelLength = Len(Text1.Text)
        .SetFocus
        End With
        
    End Sub
      

  3.   

    Private Sub Command1_Click()
    Dim num As Long
    num = CLng(text1.Text)
    Call factorial(num)
    End SubPrivate Sub Form_Load()
    text1.Text = ""
    text2.Text = ""
    End SubPrivate Sub text1_Change()
    text2.Text = ""
    End SubPrivate Sub factorial(mum As Long)
    Dim result As Long
    Dim ptr As Long
    result = 1
    For ptr = 1 To num
      result = result * ptr
    Next ptr
    text2.Text = CStr(result)
    End Sub还是有错呀,,,TEXT2算出来的值老是1呀,,,,,哪有错,这是算阶乘的呀,,
      

  4.   

    孺子不可教也
    sysmaster(为什么我还不懂)已经说得很清楚了
    你错在
    Private Sub factorial(mum As Long)
    这一句
    改成
    Private Sub factorial(num As Long)建议在模块前加Option Explicit,或者通过工具菜单的选项子菜单
    将“编辑”页中的强制声明变量选择项选中,就不至于犯这种错误了
      

  5.   

    Private Sub factorial(mum As Long)
    Private Sub factorial(num As Long)
    大佬,它没有报变量未定义就谢天谢地了mum
      

  6.   

    Private Sub factorial(mub As Long)
    Dim result As Long
    Dim ptr As Long
    result = 1
    For ptr = 1 To mub''-------------------这里改
      result = result * ptr
    Next ptr
    text2.Text = CStr(result)
    End Sub
      

  7.   

    用递归,下面是一个求阶乘的函数,没加错误处理,自己补充:
    Option ExplicitPrivate Function factorial(ByVal num As Long) As Long
        If num = 1 Then
            factorial = 1
        Else
          factorial = factorial(num - 1) * num
       End If
    End Function
      

  8.   

    byval  是什么东东,,是函数吗,,,,我怎么在书上找不到这个东东呀,,
      

  9.   

    byval 表示按值传递参数
    另外还有byref,按照应用传递参数
    VB中默认byval,
    建议所有的函数都显示地加上byVal或者byRef
    你的阶乘问题:用递归最简单了,这是c++的算法,你把它转换程VB的也是一样
    unsigned long mul(int n)
    {
    unsigned long p;
    if(n>1)
    p =n*mul(n-1);
    else
    p=1L;
    return p;
    }
      

  10.   

    求数的介乘是数据结构里研究递归算法时的经典例子rainstormmaster(rainstormmaster) 的方法是最好的
      

  11.   

    vb默认的参数传递方式应该是ByRef,而不是ByVal