1

プログラムでユーザー入力が数値か非数値かを検証するために Integer.TryParse メソッドを使用しています。1) ユーザー入力が数値の場合、プログラムは次に進み、ユーザー入力が 0 から 9 の範囲であることを検証します。 2) ユーザーが数値以外の入力を入力した場合、プログラムは「無効な入力」というメッセージを表示します。ユーザーに最初からやり直すように依頼します。

以下は私のコーディングです: Sub Main()

    Dim sevenNumbers As Integer()
    sevenNumbers = New Integer(6) {}
    Dim index As Integer
    Dim number As Integer
    Dim reEnter As Boolean = True

    Console.WriteLine("Please enter 7 integers: ")
    Console.WriteLine("<ATTENTION: FROM 0 TO 9 ONLY>")
    Console.WriteLine()

    While reEnter
        For index = 0 To 6

            Console.WriteLine("Please enter the integer no." & "{0}" & " : ", index + 1) 'Prompt user to enter 7 integers.
            sevenNumbers(index) = Console.ReadLine() 'The 7 integers are stored in an array.

            If Integer.TryParse(sevenNumbers(index), number) Then
                While sevenNumbers(index) < 0 Or sevenNumbers(index) > 9
                    Console.WriteLine("<invalid input>")
                    Console.WriteLine()
                    Console.WriteLine("------------------------------------------")
                    Console.WriteLine("<Please re-enter the 7 integers>")
                    Console.WriteLine("------------------------------------------")
                    Console.WriteLine()
                    reEnter = True
                    Exit For
                End While

            Else
                Console.WriteLine("<invalid input>")
                Console.WriteLine()
                Console.WriteLine("------------------------------------------")
                Console.WriteLine("<Please re-enter the 7 integers>")
                Console.WriteLine("------------------------------------------")
                Console.WriteLine()
                reEnter = True
                Exit For

            End If

            reEnter = False

        Next
    End While

サブ終了

ただし、ユーザーが数値以外の入力を入力すると、プログラムは続行できず、強制的に終了するエラーが表示されます。

私はこれを試しました

Sub Main() Dim num As Integer

    Console.Write("enter num:")
    Dim input = Console.ReadLine

    If Integer.TryParse(input, num) Then
        Console.WriteLine("valid. num = " & num)
    Else
        Console.WriteLine("invalid")
    End If
End Sub

それは機能しますが、コーディングのどの部分が間違っているのでしょうか??

助けてくれてありがとう!!

4

2 に答える 2

0

うーん。この行:

sevenNumbers(index) = Console.ReadLine()

読み取ったテキストをIntegers の配列に格納します。コンパイル中の場合は、後のコードに到達するまでに、変換を制御するには遅すぎます。それはすでに起こっています。

多分sevenNumbersそうあるべきString()ですか?

(実際にオンにする必要がOPTION STRICTありOPTION EXPLICITます-コードをコンパイルするときに、このような問題を見つける必要があります)

于 2012-09-27T07:43:12.697 に答える
0

コードの 2 つのサンプルは異なります。2 回目の試行では、次のようにします。

Dim input = Console.ReadLine 
If Integer.TryParse(input, num) Then

上記のコードは、 と呼ばれる変数を読み取りますinput( をString返すConsole.ReadLineためString)。次に、文字列を数値に解析しようとします。

ただし、元のコードでは次のようにします (わかりやすくするために一部の行を省略しています)。

Dim sevenNumbers As Integer()  
sevenNumbers = New Integer(6) {}  
...
sevenNumbers(index) = Console.ReadLine() 

この場合、 であると明示的に宣言した変数を読み込んでいますInteger。ユーザーが入力"abc"すると、この時点で変換が失敗します。入力を完了できないため、に到達することさえできません。TryParse

整数を読み取る代わりに、String変数を読み取ってから、その値を に解析する必要がありIntegerます (2 番目のコードで行ったように)。

デバッグ時にエラーが実際に発生する行に注意することで、これを自分で見つけることができたかもしれません: プログラムはReadLineではなくでクラッシュすることに注意してくださいTryParse

于 2012-09-27T07:42:19.670 に答える