2012-02-02 29 views
0

Vbは私の選択した言語ではありませんが、私は学校でこれを行う必要があり、私はVBのドキュメントでとても楽しい時間を過ごすことはできません。 私はちょうどユーザー入力を受け入れる非常にシンプルなコンソールアプリケーションを作成しています。摂氏度で華氏に変換します。私は、ユーザーがCelsiusで度を入力せずにenterキーを押すと、if else文がキャッチしてCelsiusに再度書き込むことを確認したいと思います。ここで私が試したことは次のとおりです。VB、コンソールアプリケーション、ユーザー入力を確認して、有効な番号を入力したことを確認するにはどうすればよいですか?

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

入力を検証する現在の方法の最大の問題は、変換が失敗したときにCDec演算子がエラーを返さないことです。入力した値が0に変換されたかどうかを確認することでこれを補うことになりますが、実際には有効な温度値である0を入力すると、間違ったエラーメッセージが表示されます。

CDec演算子ではなく、Decimal.TryParse methodに切り替えると、実際の変換値から成功/失敗を除外できるという利点があります。

simple overload of this methodは、2つのパラメータのみ受け付けます:変数にあなたが(Console.ReadLine()メソッドによって返される、あなたのケースで)変換したい文字列値と(VB.NET用語で、ByRefを渡された値)を基準に成功した場合は、変換の結果を記入するタイプDecimalである。この関数は、成功または失敗を示すBooleanの値を返します。

この単純なオーバーロードを使用しても問題は解決しますが、somewhat more complicated versionを使用する方が「良い」と思われます。指定した値を解析するときに使用するカルチャを指定できるからです。小数点区切りとしてピリオド(.)を使用し、カンマ(,)を使用する文化もあるため、これはカルチャニュートラルアプリケーションに必要です。しかし、それはあなたのケースではあまりにも先を見ているかもしれません。 :-)

If/Else IfステートメントをWhileループに置き換える方が良いでしょう。そうすれば、ユーザーが有効な番号を入力するまで繰り返し実行されます。これにより、ユーザーは必要なだけ多くのチャンスを得ることができますが、Ifブロックの両方にコードをコピーする必要がなくなります。

関連する問題