Vb.net 仅数字,不允许字母-用户输入

Vb.net 仅数字,不允许字母-用户输入,vb.net,Vb.net,我正在编写一个控制台应用程序,它需要用户输入某些值。我想禁止任何字母输入。控制台自动写入“从字符串“b”到类型“Integer”的转换无效”。但我希望控制台显示我的个人消息“不是有效数字,请重试”。我如何才能做到这一点 我试过很多不同的关键词和短语,但都不管用。也许我做错了(并非不可能),或者这只是为了别的什么。不管怎样,我都需要帮助 重述:控制台中的用户输入,只允许数字而不允许字母,并将显示我的消息 我不想发布我的代码,因为人们总是选择它,但它在这里。请注意,必须有例外情况。这是家庭作业,我需

我正在编写一个控制台应用程序,它需要用户输入某些值。我想禁止任何字母输入。控制台自动写入“从字符串“b”到类型“Integer”的转换无效”。但我希望控制台显示我的个人消息“不是有效数字,请重试”。我如何才能做到这一点

我试过很多不同的关键词和短语,但都不管用。也许我做错了(并非不可能),或者这只是为了别的什么。不管怎样,我都需要帮助

重述:控制台中的用户输入,只允许数字而不允许字母,并将显示我的消息

我不想发布我的代码,因为人们总是选择它,但它在这里。请注意,必须有例外情况。这是家庭作业,我需要一个例外,这是一个用户可以搞砸的方式。请不要告诉我不要使用异常

Module Module1
Sub Main()
    Try
        System.Console.WriteLine("Input up to 10 valid numbers to have them mathematically averaged.")
        For Index = 0 To 9
            Dim Input As IList
            Input = Console.ReadLine()
        Next Index
        If ' here is where I want to add that numbers only Then
            Throw New exception("Not a valid number, please try again.")
        Else
            System.Console.WriteLine("Now averaging numbers...")
            Dim average As Double = (n + n + n + n + n + n + n + n + n + n) / 10
            Console.WriteLine("The average of " & n & "," & n & "," & n & "," & n & "," & n & "," & n & "," & n & "," & n & "," & n & " and " & n & " is " & average & ".", "Calculation")
        End If
    Catch e As Exception
        System.Console.WriteLine(e.Message)
    End Try
End Sub
端模块

Dim inputString = Console.ReadLine
If Integer.TryParse(inputString, num) Then
    DoSomething(num)
Else
    Console.WriteLine("Not a valid number, please try again.")
End If
这里有一种方法,即满足您的要求:

Module Module1
Sub Main()
    System.Console.WriteLine("Input valid numbers seperated by spaces to have them mathematically averaged.")
    Dim inputArray As String() = System.Text.RegularExpressions.Regex.Replace(Console.ReadLine().Trim(), "\s{2,}", " ").Split(New Char() {" "})
    Dim values As New ArrayList
    Dim sum As Integer
    For i As Integer = 0 To inputArray.Length - 1
        Try
            sum = sum + Integer.Parse(inputArray(i), Globalization.NumberStyles.Integer)
            values.Add(inputArray(i))
        Catch ex As Exception
            Console.WriteLine(String.Format("The value ""{0}"" is not a valid number and will be ignored. ExceptionMessage: {1}", inputArray(i), ex.Message))
        End Try
    Next
    Dim average As Decimal = sum / values.Count
    Console.WriteLine(vbCrLf)
    Console.WriteLine(String.Format("The average of ""{0}"" is {1}", Join(values.ToArray, ", "), average))
    Console.WriteLine(vbCrLf)
    Main()
End Sub

结束模块

对于初学者来说,
尝试捕捉
应该位于循环的输入收集
内部。现在编写程序时,只要输入一个错误值,执行就会跳到catch,程序就会结束!如果您尝试将输入转换为十进制,则无需手动引发异常,如果您的输入不是十进制,则将自动引发异常!尝试将当前控制台输入强制转换为十进制,然后将该数字添加到列表中

Dim inputString = Console.ReadLine
If Integer.TryParse(inputString, num) Then
    DoSomething(num)
Else
    Console.WriteLine("Not a valid number, please try again.")
End If
Dim inputNumber as Decimal = CDec(Console.ReadLine())
Input.Add(inputNumber)

另外,
n
每次都是相同的数字,因此您的操作方式将不起作用(查找列表工作原理、如何向列表添加元素以及如何显示列表元素的基础知识)

您能显示您的代码吗?该消息是如何生成的?你只是将异常转储到控制台窗口吗?@mellamokb我发布了我的代码,我不确定消息是如何生成的,但它会显示出来。我如何将其合并到我的代码中?我试过了,但我不知道该怎么做。这个答案避免了在现实世界中可能是理想的例外情况,但遗憾的是,这是
家庭作业
根据您的要求更新了我的答案。有些事情我从未见过,但我应该熟悉一下。谢谢你@Till!我对它做了一点修改,允许也输入小数。当我输入“If input=Integer.MaxValue”时,程序将正确运行,我所需要的就是显示我的异常消息。
If input=Integer.MaxValue
毫无意义。使用所有有效数字尝试您的程序,您会发现您的程序不正确。用你最新的代码更新你的问题,然后按照我上面给你的建议去做。