Вопрос

I am using Integer.TryParse Method to validate whether user input is a numeric or non-numeric in my program. 1)if the user input is numeric, the program will then proceed and validate that the user input is range from 0 to 9. 2)If the user is enter a non-numeric input, the program will display the message "invalid input" and ask user to start from beginning.

Following is my coding: 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

End Sub

However, when a user enter a non-numeric input, the program can't continue and shows an error that forced to close.

i tried this

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

it does works and i am wondering which part of my coding is wrong??

Thank for help!!

Это было полезно?

Решение

Your two samples of code are different. In your second attempt, you do this:

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

The above code reads into a variable called input that will be a String (because Console.ReadLine returns a String). Then, you try to parse the string into a number.

However, in your original code, you do this (some lines omitted for clarity):

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

In this case, you are reading into a variable that you have explicitly declared to be an Integer. If the user types "abc" then the conversion will fail at this point - you won't even get to the TryParse because you can't complete the innput.

Instead of reading to an integer, you need to read into a String variable and then parse that value into an Integer (as you did in your second code).

You could have spotted this yourself by taking note of the line that the error actually occurs on when debugging: you should note that the program crashes on the ReadLine, not on the TryParse.

Другие советы

Um. This line:

sevenNumbers(index) = Console.ReadLine()

Is storing whatever text has been read into an array of Integers. If it's compiling, then by the time you reach any later code, you're too late to control the conversion. It's already happened.

Maybe sevenNumbers should be String()?

(You really ought to turn on OPTION STRICT and OPTION EXPLICIT - it should find problems like this for you when it compiles the code)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top