我正在使用Integer.TryParse方法验证用户输入在我的程序中是数字还是非数字。 1)如果用户输入是数字,则程序将继续并验证用户输入的范围是0到9。 2)如果用户输入非数字输入,程序将显示消息“无效输入”并要求用户从头开始。
以下是我的编码: Sub Main()
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
End Sub
但是,当用户输入非数字输入时,程序无法继续并显示强制关闭的错误。
我试过这个
Sub Main() 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
它确实有效,我想知道我编码的哪一部分是错误的?
感谢帮助!!
答案 0 :(得分:0)
您的两个代码示例不同。在第二次尝试中,您执行此操作:
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"
,则此时转换将失败 - 您甚至 <{1}},因为您无法完成输入。
不是读取整数,而是需要读入TryParse
变量,然后将该值解析为String
(就像在第二个代码中所做的那样)。
您可以通过记录调试时错误实际发生的行来自己发现这一点:您应该注意该程序在Integer
上的<{1>},而不是上崩溃{1}}。
答案 1 :(得分:0)
庵。这一行:
sevenNumbers(index) = Console.ReadLine()
将已读取的任何文本存储到Integer
的数组中。如果它正在编译,那么当你到达任何后来的代码时,你来不及控制转换。它已经发生了。
也许sevenNumbers
应该是String()
?
(你真的应该打开OPTION STRICT
和OPTION EXPLICIT
- 它应该在编译代码时为你找到这样的问题)