2
Dim mynumber as Integer 'This is the variable as an integer, (Integers only allow WHOLE numbers)

Console.WriteLine("Enter your number..") 'Ask to enter number
    Try
        mynumber = Console.ReadLine 'Read user input and store it
    Catch
        Console.WriteLine()
        Console.ForegroundColor = ConsoleColor.Red
        Console.WriteLine("Only whole numbers allowed! Press enter to start again!")
        Console.ResetColor()
        Console.ReadLine()
        Console.Clear()
        GoTo start
    End Try

わかりました、上記の例からわかるように、エラー処理のために aa Try/Catch を設定しました。問題が発生しました。はい、Try/Catch コードは文字 (文字列) の入力を防ぎますが、10 進数を入力すると、それでも受け入れられます。なんで?そして、これをどのように防ぐことができますか?整数は整数のみを受け入れるため、10 進数は受け入れられません。

ありがとう。

4

3 に答える 3

2

書かれているように、Integer.TryParseを使用して、数値を整数に解析できるかどうかを確認できます。また、 Visual Studio が VB.NET コードの問題を指摘するのに役立つOption Strict Onを実際に使用する必要があります。

私の答えは次のとおりです。

Option Strict On

Module Module1

    Sub Main()

        Dim myNumber As Integer 'This is the variable as an integer, (Integers only allow WHOLE numbers)
        Dim userInput As String
        Dim userInputValid As Boolean = False

        While Not userInputValid
            Console.Write("Enter your number.. ") 'Ask to enter number

            userInput = Console.ReadLine() 'Read user input and store it
            userInputValid = Integer.TryParse(userInput, myNumber)
            If Not userInputValid Then
                Console.ForegroundColor = ConsoleColor.Red
                Console.WriteLine("Only whole numbers allowed! Press enter to start again!")
                Console.ResetColor()
                Console.ReadLine()
                Console.Clear()
            End If

        End While

        Console.WriteLine("I got the number " & myNumber.ToString())
        Console.ReadLine()

    End Sub

End Module

編集: Option Strict ステートメントの「新しいプロジェクトの Option Strict デフォルト設定を設定するには」セクションを参照してください。

于 2013-10-10T20:09:48.763 に答える
2

数値型間で暗黙的な変換が行われるため、エラーは発生しません。正確な数値型を知る方法はいくつかあります。ここでの最良のオプションは、次のコードの行にあると思います。

Dim mynumber0 As Double 'This is the variable as an integer, (Integers only allow WHOLE numbers)
Dim wasOK As Boolean = True
Console.WriteLine("Enter your number..") 'Ask to enter number
Try
    mynumber0 = Console.ReadLine 'Read user input and store it
    If (Convert.ToInt32(mynumber0) <> mynumber0) Then
        wasOK = False
    End If
Catch
    wasOK = False
End Try

Dim mynumber As Integer = mynumber0
If (Not wasOK) Then
    Console.WriteLine()
    Console.ForegroundColor = ConsoleColor.Red
    Console.WriteLine("Only whole numbers allowed! Press enter to start again!")
    Console.ResetColor()
    Console.ReadLine()
    Console.Clear()
    GoTo start
End If

アップデート

TryParsemafafuが提案する代替案

Dim mynumber As Integer 'This is the variable as an integer, (Integers only allow WHOLE numbers)
Console.WriteLine("Enter your number..") 'Ask to enter number
If (Not Integer.TryParse(Console.ReadLine, mynumber)) Then
    Console.WriteLine()
    Console.ForegroundColor = ConsoleColor.Red
    Console.WriteLine("Only whole numbers allowed! Press enter to start again!")
    Console.ResetColor()
    Console.ReadLine()
    Console.Clear()
    GoTo start
End If
于 2013-10-10T19:54:25.680 に答える