Принимайте только целочисленные значения из InputBox VB.Net в цикле Do While - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь выяснить, почему моя программа принимает нецелые значения, которые затем преобразуются в целое число путем округления.Первое значение, которое вводит пользователь, проверяется, а остальное - нет.Моя программа предназначена для подсчета количества нечетных и четных целых чисел, введенных пользователем.Любая помощь будет принята с благодарностью.

Private Sub btnShow_Click(sender As System.Object, e As System.EventArgs) Handles btnAddNum.Click
    Dim intInputNum As Integer
    Dim strInputNum As String = ""
    Dim isEven As Integer = 0
    Dim isOdd As Integer = 0
    Dim userInput As String = InputBox(("Enter a number (0 to end)"))
    Dim numArray() As String = strInputNum.Split(New Char() {","c})
    Dim validInput As Boolean = Integer.TryParse(userInput, intInputNum)


    If validInput = False Then
        MsgBox("Invalid input, integer numbers only")
    ElseIf validInput = True Then
        Do While intInputNum > 0 And validInput = True
            If intInputNum Mod 2 = 0 And validInput = True Then
                lblEvenValues.Text = lblEvenValues.Text & CStr(intInputNum) & ","
                intInputNum = Val(InputBox("Enter a number (0 to end)"))
                isEven = isEven + 1
                lblCountEven.Text = isEven
            ElseIf intInputNum Mod 2 <> 0 And validInput = True Then
                lblOddValues.Text = lblOddValues.Text & CStr(intInputNum) & ","
                intInputNum = Val(InputBox("Enter a number (0 to end)"))
                isOdd = isOdd + 1
                lblCountOdd.Text = isOdd
            ElseIf validInput = False Then
                MsgBox("Invalid input, integer numbers only")
            End If
        Loop
    End If
End Sub

1 Ответ

0 голосов
/ 01 июня 2018

Эта строка:

Do While intInputNum > 0

вызывает у вас проблемы.Когда пользователь вводит нецелое значение, после первого цикла эта строка: Val(InputBox("Enter a number (0 to end)")) обнуляется.Очевидно, что оно не больше 0.

Повторно используйте ваш логический оператор для оценки userInput, а не intInputNum, например:

userInput = Val(InputBox("Enter a number (0 to end)")) validInput = Integer.TryParse(userInput, intInputNum)

Затем вам нужно исправить окно сообщенияместо, чтобы просто показать за пределами вашего цикла, а не в нем.Поэтому, когда validInput <> True прервет цикл и выведет ваш Msgbox.

, вам также потребуется исправить оператор Do While, чтобы он правильно оценивал userInput вместо intInputNum

.
...