Тип данных для переменной "Mark" задан как одиночный.
Одна из приятных вещей в строго типизированных платформах, таких как .Net, состоит в том, что большинство ваших правил проверки:1005 * уже применяется . Вы не сможете назначить нечисловое значение для Mark
, а в качестве типа значения оно не может быть даже null
(Nothing
в VB.Net оценивается как 0
для типа Single
.
Итак, вместо этого нам нужно выполнить резервное копирование и найти, где данные получены от пользователя, за до они назначаются на Mark
переменная. Где-то у вас будет код типа Mark(I) = Console.Readline()
или аналогичный. Вот где должно быть ваше тестирование. Проверьте значение string , полученное от пользователя до того, как присвоит значение Single. И когда вы дойдете до этого момента, лучший способ выполнить это тестирование - это функция Single.TryParse()
. Затем вы можете проверить, что проанализированное значение Single находится в правильном диапазоне.
Хорошо, с более полным кодом мы можем начать давать вам реальные улучшения.
Одно из предложений - думать о возврате значения. Лучше, чтобы эта функция возвращала массив, а не общалась через глобальную переменную. Я упоминаю это здесь, потому что это также будет означать изменение способа вызова этой функции.
Это вне пути:
Function InputMarks() As Single()
Dim result(3) As Single
For I As Integer = 0 To 3
Dim ErrorMsg As String = ""
Do
Console.Write($"{ErrorMsg}Please enter test marks for test {I+1}: ")
Dim input As String = Console.ReadLine()
ErrorMsg = $"{vbCrLf}Please enter valid test marks.{vbCrLf}{vbCrLf}"
While Not Single.TryParse(input, result(I)) OrElse result(I) < 0 OrElse result(I) > 100
Next
Return result
End Function
Нет GOTO
требуется или требуется.
Если вы еще не видели их, $"strings"
используют строковая интерполяция и оператор OrElse
вместо Or
предназначены для получения режима короткого замыкания. Современный VB.Net должен использовать OrElse
и AndAlso
вместо Or
и And
почти все время.
В этом случае использование OrElse
означает, что мы уверены, что Single.TryParse()
успешно завершено, и у нас будет действительное число до того, как попытается проверить диапазон. Если операция разбора не удалась, тесты диапазона даже не будут предприняты.