【问题标题】:Console Application on VB2008 - Integer.TryParse Method ErrorVB2008 上的控制台应用程序 - Integer.TryParse 方法错误
【发布时间】:2012-09-27 07:33:45
【问题描述】:

我正在使用 Integer.TryParse 方法来验证用户输入在我的程序中是数字还是非数字。 1)如果用户输入是数字,程序将继续并验证用户输入的范围是 0 到 9。 2)如果用户输入的是非数字输入,程序会显示“输入无效”的信息,并要求用户从头开始。

以下是我的编码: 子主()

    Dim sevenNumbers As Integer()
    sevenNumbers = New Integer(6) {}
    Dim index As Integer
    Dim number As Integer
    Dim reEnter As Boolean = True

    Console.WriteLine("Please enter 7 integers: ")
    Console.WriteLine("<ATTENTION: FROM 0 TO 9 ONLY>")
    Console.WriteLine()

    While reEnter
        For index = 0 To 6

            Console.WriteLine("Please enter the integer no." & "{0}" & " : ", index + 1) 'Prompt user to enter 7 integers.
            sevenNumbers(index) = Console.ReadLine() 'The 7 integers are stored in an array.

            If Integer.TryParse(sevenNumbers(index), number) Then
                While sevenNumbers(index) < 0 Or sevenNumbers(index) > 9
                    Console.WriteLine("<invalid input>")
                    Console.WriteLine()
                    Console.WriteLine("------------------------------------------")
                    Console.WriteLine("<Please re-enter the 7 integers>")
                    Console.WriteLine("------------------------------------------")
                    Console.WriteLine()
                    reEnter = True
                    Exit For
                End While

            Else
                Console.WriteLine("<invalid input>")
                Console.WriteLine()
                Console.WriteLine("------------------------------------------")
                Console.WriteLine("<Please re-enter the 7 integers>")
                Console.WriteLine("------------------------------------------")
                Console.WriteLine()
                reEnter = True
                Exit For

            End If

            reEnter = False

        Next
    End While

结束子

但是,当用户输入非数字输入时,程序无法继续并显示一个强制关闭的错误。

我试过了

子主() Dim num As Integer

    Console.Write("enter num:")
    Dim input = Console.ReadLine

    If Integer.TryParse(input, num) Then
        Console.WriteLine("valid. num = " & num)
    Else
        Console.WriteLine("invalid")
    End If
End Sub

它确实有效,我想知道我的编码的哪一部分是错误的??

感谢您的帮助!

【问题讨论】:

    标签: vb.net tryparse


    【解决方案1】:

    您的两个代码示例不同。在您的第二次尝试中,您这样做:

    Dim input = Console.ReadLine 
    If Integer.TryParse(input, num) Then
    

    上面的代码读入了一个名为input的变量,它将是一个String(因为Console.ReadLine返回一个String)。然后,您尝试将字符串解析为数字。

    但是,在您的原始代码中,您是这样做的(为清楚起见,省略了一些行):

    Dim sevenNumbers As Integer()  
    sevenNumbers = New Integer(6) {}  
    ...
    sevenNumbers(index) = Console.ReadLine() 
    

    在这种情况下,您正在读取已明确声明为Integer 的变量。如果用户键入 "abc",那么此时转换将失败 - 您甚至无法获取TryParse,因为您无法完成输入。

    您需要读取String 变量,然后将该值解析为Integer(就像您在第二个代码中所做的那样),而不是读取整数。

    您可以通过记下调试时实际发生错误的行来自己发现这一点:您应该注意程序在ReadLine 上崩溃,不是TryParse .

    【讨论】:

    • 是的,我已将 SevenNumbers 更改为 String 而不是使用整数,它确实有效!谢谢!
    【解决方案2】:

    嗯。这一行:

    sevenNumbers(index) = Console.ReadLine()
    

    将读取的任何文本存储到Integers 的数组中。如果它正在编译,那么当你到达任何后面的代码时,你已经来不及控制转换了。这已经发生了。

    也许sevenNumbers 应该是String()

    (你真的应该打开OPTION STRICTOPTION EXPLICIT - 它应该会在编译代码时为你找到这样的问题)

    【讨论】:

    • 感谢您的提示,现在我可以运行我的程序了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2010-09-17
    • 2010-12-13
    • 2012-02-04
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多