如何检查VB,控制台应用程序,用户输入以确保输入有效数字?

时间:2012-02-02 02:41:04

标签: .net vb.net decimal type-conversion

Vb不是我选择的语言,但我必须在学校这样做,而且我的VB文档也不是很容易。 我只是创建一个非常简单的控制台应用程序,接受用户输入:摄氏度,并将其转换为华氏度。我想确保如果用户只是输入而不输入摄氏度,那么if else语句将捕获并写入以再次输入摄氏度。这是我尝试过的:

Module Module1
'Chapter 2:     Celcius to Fahrenheit
'Programmer:    Scott McPherson
'Date:          February 2, 2012
'Purpose:       To Convert User Input Celcius to Output Fahrenheit
'
'Declaration
    Dim decCelcius As Decimal = 0
    Dim decFahrenheit As Decimal = 0

Sub Main()
    'Input in Celcius
    Console.Write("Enter the degrees in Celsius: ")

    Console.WriteLine()
    If CDec(Console.ReadLine()) <> 0 Then
        decCelcius = CDec(Console.ReadLine())
        decFahrenheit = 1.8 * decCelcius + 32
    Else
        Console.WriteLine("Don't make me ask again! ENTER THE DEGREES IN CELSIUS: ")
        decCelcius = CDec(Console.ReadLine())
        decFahrenheit = 1.8 * decCelcius + 32
    End If
    Console.WriteLine()
    Console.WriteLine("Degrees in Fahrenheit = " & decFahrenheit)
    Console.Read()
End Sub

End Module

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

您当前验证输入的方法的最大问题是CDec运算符在转换失败时不会返回错误。您通过检查输入的值是否转换为0来补偿这一点,但这意味着如果他们输入0,那么您将显示粗鲁的错误消息,这实际上是一个有效的温度值!< / p>

因此,您可能希望切换到使用Decimal.TryParse method而不是CDec运算符,这有利于将成功/失败与实际转换值分开。

simple overload of this method只接受两个参数:要转换的字符串值(在您的情况下,由Console.ReadLine()方法返回)和引用(在VB.NET术语中,值为将ByRef)传递给Decimal类型的变量,如果变换成功,将填充转换结果。该函数返回一个Boolean值,表示成功或失败。

您可以使用这个简单的重载,但使用somewhat more complicated version可能“更好”,因为它允许您指定在尝试解析指定值时要使用的区域性。由于某些文化使用句点(.)作为小数点分隔符,而其他文档使用逗号(,),因此这对于文化中立的应用程序是必需的。不过,在你的情况下,这可能有点过于前瞻性。 : - )

除了解决这个直接问题之外,用If循环替换Else If / While语句也会更好。这样,它将一直持续运行,直到用户设法输入有效数字。这不仅为用户提供了所需的机会,而且还使您不必在If块内复制代码。