2015-05-20 2 views
1

Мне нужна помощь с небольшой проблемой. Я долго не программировал и не могу понять, как это исправить. У меня есть небольшой проект для школы, и я не могу понять, почему я получаю эту ошибку при проверке входных данных.Visual Basic - Входная проверка

Например, я проверяю, является ли вход действительным и между диапазоном min и max, создавая функцию для возврата значения true или false на основе введенных значений. Причина, по которой я использую функцию, заключается в том, что я выполняю несколько подобных проверок, и я решил скорее переписать ее, это был лучший способ выполнить эту задачу.

Do While inputValid(string, min, max) 

Это моя проверка, ниже приведена простая функция для подтверждения этого.

Private Function inputValid(input As String, min As Integer, max As Integer) 
    If Not IsNumeric(input) Then 
     Return False 
    End If 

    If input > min Or input < max Then 
     Return False 
    Else 
     Return True 
    End If 
End Function 

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

Может ли кто-нибудь помочь мне исправить это? Благодаря!

ответ

1

Вы можете использовать CInt преобразовать строку в целое

Private Function inputValid(input As String, min As Integer, max As Integer) 
    Dim v as Integer 
    If Not IsNumeric(input) Then 
     Return False 
    End If 
    v=CInt(input) 
    If v < min Or v > max Then 
     Return False 
    Else 
     Return True 
    End If 
End Function 
+0

Это проблема, с которой я столкнулся, я пробую такие вещи, и это все еще не работает, и я просто не знаю почему. У него такая же проблема. Я не понимаю, в какой момент он пытается преобразовать в двойной. – Stephen

1

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

Private Function inputValid(input As String, min As Integer, max As Integer) 
    dim regex as new Regex("[\d]+")  
    If not regex.isMatch(input) OrElse cint(input) > min OrElse cint(input) < max Then 
     Return False 
    Else 
     Return True 
    End If 
End Function 
+0

Теперь вы ввели новую проблему: регулярное выражение. Обратите внимание, что 'Regex.IsMatch (" 123 "," [\ d] + ")' возвращает True. В .NET '\ d' означает' \ p {Nd} '*, если * вы также не указываете RegexOptions.ECMAScript. (Ссылка: [Символ десятичного знака] (https://msdn.microsoft.com/en-us/library/20bw873z (v = vs.110) .aspx # DigitCharacter)). Явное указание '[0-9]' безопаснее. –

0

Вы можете использовать Integer.TryParse функция, чтобы проверить, может ли строка быть преобразована в целое число.

Кроме того, вы можете вернуть логическое значение, которое является результатом сравнения: вместо чего-то вроде If x > 4 Then Return True вы можете использовать Return x > 4.

Так что ваша функция может выглядеть

Private Function StringIsValidInteger(s As String, min As Integer, max As Integer) As Boolean 
    Dim tmp As Integer 

    If Integer.TryParse(s, tmp) Then 
     Return (tmp >= min AndAlso tmp <= max) 
    End If 

    Return False 

End Function 
0

Извините, ребята. Я возвращал true, и ложный неправильный путь вокруг него появляется, потому что мне нужно продолжить цикл, который должен быть истинным, где он обычно будет ложным при регулярной проверке.

Просто изменив функцию inputValid на истинные и ложные возвращаемые типы, он отлично работает.

Спасибо за помощь.

+0

Это показывает, что вы должны быть осторожны, когда вы выбираете имя функции. Также обратите внимание, что 'IsNumeric' возвращает True для строк типа« 1,2 »,« 1e2 »и« & H2 ». –

Смежные вопросы