1

次のコードは、私の理解のギャップを明らかにしています。誰かがそれが何であるか、コードを修正する方法を教えてください

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim NumberToGuess, Answer As Integer
    NumberToGuess = InputBox("Enter a Secret Number Between 1 and 20!")
    While Answer <> NumberToGuess
        Answer = InputBox("Please enter your guess")
        If IsNumeric(Answer) = False Then MsgBox("That ain't no number")
        If Answer > NumberToGuess Then MsgBox("Too high thicko. Try Again")
        If Answer < NumberToGuess Then MsgBox("Too Low chump. Try Again")
    End While
    MsgBox("Well done you guessed the right number")
End Sub
4

4 に答える 4

1

問題は、InputBox 関数の戻り値です。
文字列を返し、それを整数変数に割り当てようとします。
これにより、VB コンパイラは文字列から整数への暗黙的な変換を強制的に実行し、有効な数値を入力するまで機能しますが、入力ボックスを空のままにしておくと、暗黙的な変換は失敗し、InvalidCastException.

Option Strict Onを使用してコードをコンパイルすると、ビルド中にキャッチされます。
これがないと、割り当て時にプログラムがクラッシュします。
NumberToGuess の割り当てにも同じ問題があります

Dim NumberToGuess, Answer As Integer
While True
    Dim input = InputBox("Enter a Secret Number Between 1 and 20!")
    if IsNumeric(input) Then
        NumberToGuess = Convert.ToInt32(input)
        Exit While
    Else
        MsgBox("Not a valid number")
    End If
End While    
While Answer <> NumberToGuess
    Dim result = InputBox("Please enter your guess")
    If IsNumeric(result) = False Then 
       MsgBox("That ain't no number")
    Else
       Answer = Convert.ToInt32(result)
       If Answer > NumberToGuess Then MsgBox("Too high thicko. Try Again")
       If Answer < NumberToGuess Then MsgBox("Too Low chump. Try Again")
    End If
End While
MsgBox("Well done you guessed the right number")

また、Carsten Konig 氏からの回答は、論理コード フローのエラーを正しく指摘していることも付け加えておきます。

于 2014-08-30T09:52:46.277 に答える
0

以下を使用できます。

 Dim NumberToGuess, Answer As Integer
        NumberToGuess = InputBox("Enter a Secret Number Between 1 and 20!")
        While Answer <> NumberToGuess
            Answer = InputBox("Please enter your guess")
            If IsNumeric(Answer) = False Then
                MsgBox("That ain't no number")
            Else
                Select Case Answer < NumberToGuess
                    Case True
                        MsgBox("Too Low chump. Try Again")
                    Case False
                        MsgBox("Too high thicko. Try Again")
                    Case Else
                        MsgBox("Well done you guessed the right number")
                End Select
            End If
        End While
于 2014-08-30T09:58:19.473 に答える