Teal_ Ответов: 2

Как исправить эту обработку исключений


Мне это нужно для проверки ввода данных от пользователя. Он должен убедиться, что он числовой и находится в диапазоне от -1 до 5, включая 0 в качестве допустимого входного сигнала.

Что я уже пробовал:

Sub Main()
       Dim Years As Integer
       Dim Valid As Boolean = False

       Do Until Valid = True
           Console.WriteLine("Enter a number between -1 and  5")

           If IsNumeric(Console.ReadLine) Then
               Years = Console.ReadLine()
               Console.WriteLine()
               Select Case Years
                   Case -1 To 5
                       Valid = True
                   Case Else
                       Console.WriteLine("The number is outside the range")

               End Select
               Console.WriteLine("Enter a valid number")
           End If


       Loop
       Console.ReadLine()
   End Sub

Richard MacCutchan

В чем вопрос?

Teal_

в настоящее время опубликованный код будет пойман, если введено буквенное число, но если введено число вне или внутри диапазона, то он выдаст ошибку в строке "Years = Console.Readline ""преобразование из строки ""В тип" целое число "недопустимо". Я не знаю, почему это происходит. Кроме того, когда я удаляю "if IsNumeric(console. readline) Затем " это работает. Я хотел бы помочь исправить его так, чтобы он выходил из цикла только в том случае, если будет введено число от -1 до 5

ZurdoDev

Приставка.ReadLine принимает входные данные от пользователя. Так что не звоните дважды. Храните его в строке, а затем проверьте.

"Преобразование из строки ""В тип" целое число "недопустимо". - Посмотри на свой код. Вы определили годы как целое число, поэтому, когда вы вводите что-то, что не является целым числом, вы получите эту ошибку.

Peter_in_2780

Ваша проблема заключается в вызове консоли.Перечитай дважды. Вам нужно вызвать его один раз и использовать этот результат для тестирования, а затем преобразовать.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Потому что вы пытаетесь прочитать ввод дважды. Ваш код должен быть примерно таким:

Try
    Years = Console.ReadLine()
    Console.WriteLine()
    ' check for valid number etc. ...

Catch Exception ' of some type
    Console.WriteLine("Enter a valid number")
End Try


Ralf Meier

Годы определяются как целое число.
Приставка.Readline принесет вам строку - поэтому я предлагаю преобразовать ее в целое число ...

Richard MacCutchan

Спасибо. Мне следовало бы это предвидеть, но я очень новичок в этом деле. VB.NET.

Ralf Meier

Я тебе не верю... ;)... но это неважно ... :)

Рейтинг:
12

Bryian Tan

Вы можете использовать int32 значение.Функция TryParse и небольшая настройка, чтобы получить желаемый результат. Смотреть ниже.

Dim Years As Integer
        Dim Valid As Boolean = False

        Console.WriteLine("Enter a number between -1 and  5")

        Do Until Valid = True
            If (Int32.TryParse(Console.ReadLine(), Years)) Then
                Select Case Years
                    Case -1 To 5
                        Valid = True
                        Console.WriteLine("Good job!!!")
                    Case Else
                        Console.WriteLine("The number is outside the range")
                End Select
            Else
                Console.WriteLine("Enter a valid number")
            End If

        Loop
        Console.ReadLine()

Вот ссылка, чтобы проверить это Целочисленный диапазон консоли VB[^]