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

.net 如何检查VB、控制台应用程序、用户输入以确保输入的数字有效?,.net,vb.net,decimal,type-conversion,.net,Vb.net,Decimal,Type Conversion,Vb不是我选择的语言,但我必须为学校做这件事,我对Vb的文档不是很容易。 我只是创建了一个非常简单的控制台应用程序,它接受用户输入:摄氏度,并将其转换为华氏度。我想确保,如果用户只点击enter而没有输入摄氏度,那么if-else语句将捕获并再次写入输入摄氏度。以下是我尝试过的: Module Module1 'Chapter 2: Celcius to Fahrenheit 'Programmer: Scott McPherson 'Date: February

Vb不是我选择的语言,但我必须为学校做这件事,我对Vb的文档不是很容易。 我只是创建了一个非常简单的控制台应用程序,它接受用户输入:摄氏度,并将其转换为华氏度。我想确保,如果用户只点击enter而没有输入摄氏度,那么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
第二章:塞尔修斯到华氏
程序员:斯科特·麦克弗森
日期:2012年2月2日
'用途:将用户输入的摄氏度转换为输出华氏度
'
"宣言",
十进制十进制小数=0
十进制的十进制温度=0
副标题()
“在Celcius中输入
Console.Write(“输入摄氏度:”)
Console.WriteLine()
如果CDec(Console.ReadLine())为0,则
decCelcius=CDec(Console.ReadLine())
华氏温度=1.8*decCelcius+32
其他的
WriteLine(“不要让我再问了!输入摄氏度:”)
decCelcius=CDec(Console.ReadLine())
华氏温度=1.8*decCelcius+32
如果结束
Console.WriteLine()
Console.WriteLine(“华氏度数=“&decfhrenheit”)
Console.Read()
端接头
端模块

如何使其工作?

当前验证输入方法的最大问题是,
CDec
运算符在转换失败时不会返回错误。您可以通过检查输入的值是否转换为0来对此进行补偿,但这意味着您将在输入
0
时显示错误消息,这实际上是一个有效的温度值

因此,您可能不想使用
CDec
运算符,而是希望切换到使用,这样做的优点是将成功/失败与实际转换值分开

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

您可以使用这个简单的重载,但使用可能“更好”,因为它允许您在尝试解析指定值时指定要使用的区域性。由于某些区域性使用句点(
)作为小数分隔符,而其他区域性使用逗号(
),这对于区域性无关的应用程序是必要的。不过,对你来说,这可能有点过于前瞻性了。:-)

除了解决眼前的问题外,最好将
If
/
Else If
语句替换为
While
循环。这样,它将不断地运行,直到用户输入一个有效的数字。这不仅为用户提供了所需的机会,而且还避免了在两个
If
块中重复代码