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
我怎样才能让它发挥作用?
答案 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
块内复制代码。